MYSQL 的事务处理主要有两种方法。

 1 、用 begin,rollback,commit 来实现

begin 开始一个事务

rollback 事务回滚

commit 事务确认

   2 、直接用 set 来改变 mysql 的自动提交模式

MYSQL 默认是自动提交的,也就是你提交一个 QUERY ,它就直接执行!我们可以通过

set autocommit=0 禁止自动提交

set autocommit=1 开启自动提交

来实现事务的处理。

当你用 set autocommit=0 的时候,你以后所有的 SQL 都将做为事务处理,直到你用 commit 确认或 rollback 结束。

注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!

个人推荐使用第一种方法!

MYSQL 中只有 INNODB 和 BDB 类型的数据表才能支持事务处理!其他的类型是不支持的!

*** : 一般 MYSQL 数据库默认的引擎是 MyISAM, 这种引擎不支持事务!如果要让 MYSQL 支持事务,可以自己手动修改 :

方法如下: 1. 修改 c:\appserv\mysql\my.ini 文件,找到 skip-InnoDB, 在前面加上 # ,后保存文件。

2. 在运行中输入: services.msc, 重启 mysql 服务。

3. 到 phpmyadmin 中, mysql->show engines;( 或执行 mysql->show variables like 'have_%'; ), 查看 InnoDB 为 YES, 即表示数据库支持 InnoDB 了。

也就说明支持事务 transaction 了。

4. 在创建表时,就可以为 Storage Engine 选择 InnoDB 引擎了。如果是以前创建的表,可以使用 mysql->alter table table_name type=InnoDB;

或 mysql->alter table table_name engine=InnoDB; 来改变数据表的引擎以支持事务。

以下是我做測試的示例代碼 :

/*************** transaction--1 ***************/

/* 方法一 */

    mysql_query("BEGIN"); // 或者 mysql_query("START TRANSACTION");
// 若不使用事務,則 $sql 執行成功, $sql1 執行失敗
$sql = " insert into test values('11','88') ";
$sql1 = " insert into test values('11','88','444') ";
$res = mysql_query($sql);
$res1 = mysql_query($sql1); // 因爲使用了事務,則兩個 insert 都執行失敗
if($res && $res1){
mysql_query("COMMIT");
}
else{
mysql_query("ROLLBACK");
}
mysql_query("END");

/**************** transaction--2 *******************/

/* 方法二 */

       mysql_query("SET AUTOCOMMIT=0"); // 設置 mysql 不自動提交,需自行用 commit 語句提交
$sql = " insert into test values('11','88') ";
$sql1 = " insert into test values('11','88','444') ";
$res = mysql_query($sql);
$res1 = mysql_query($sql1);
// 因爲使用了事務,則兩個 insert 都執行失敗
if($res && $res1){
mysql_query("COMMIT");
}
else{
mysql_query("ROLLBACK");
}
mysql_query("END");

/*************************** END ***************/

对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法:

代码如下:

//MyISAM & InnoDB 都支持,
//Notes:query語句不能寫在一起如:mysql_query("select * from a;select * from b;");

    $sql_1=" LOCK TABLES test WRITE ";
mysql_query($sql_1); $sql_2=" INSERT INTO test VALUES('".$a."','".$b."') ";
if(mysql_query($sql_2)){
echo 'successful!';
}else{
echo 'Unsuccessful!';
} $sql_3=" UNLOCK TABLES ";
mysql_query($sql_3);

/*************************** END ***************/

php mysql 事务处理的更多相关文章

  1. mysql事务处理用法与实例详解

    来源:转载  MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID事务.行级锁.并发 3.Berke ...

  2. mysql事务处理的意义

    MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关 1.MyISAM:不支持事务,用于只读程序提高性能 .InnoDB:支持ACID事务.行级锁.并发 .Berkeley DB:支 ...

  3. PHP操作MySQL事务处理

    PHP操作MySQL事务处理 /*************** 用begin,rollback,commit来实现 ***************/ /*方法二*/ $conn = mysqli_co ...

  4. [转]mysql事务处理用法与实例详解

    转自:http://www.cnblogs.com/ymy124/p/3718439.html MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于 ...

  5. java-Java实现mysql事务处理操作

    数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成. 并非任意的对数据库的操作序列都是数据库事务.数据库事务拥有以下四个特性,习惯上被称之为ACID特性. ...

  6. PHP与MYSQL事务处理

    /*MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事务rollback 事务回滚commit 事务确认2.直接用set来改变mysql的 ...

  7. mysql事务处理

    事务处理能保证所有的sql操作一次性完成或回滚,mysql默认的MyISAM表类型是不支持事务处理的,如果需要做事务处理,需要把表类型换成InnoDB <?php $dsn='mysql:hos ...

  8. 解析php mysql 事务处理回滚操作

    论坛扣币项目中,用户支付论坛币的时候如果突然断网.电脑死机.停电.等其它自然灾害时,导致本次交易没有成功(即用户的币已经扣掉了,但是服务器数据库中没有消费记录等其它情况),这种情况应该怎么样进行处理呢 ...

  9. PHP mysql 事务处理实例

    事务是必须满足4个条件(ACID):原子性(Autmic).一致性(Consistency).隔离性(Isolation).持久性(Durability) 原子性(Autmic):事务在执行性,要做到 ...

随机推荐

  1. matlab练习程序(图像球面化)

    十一没什么事干,接着看图像算法. 这个球面化算法最初是在ps上的球面化滤镜中看到的,感觉挺有意思,就研究了一下. 算法的详细推导可以在这篇博客中找到,我比较懒,只在纸上推了一遍,就不在博客上编辑了. ...

  2. contentprovider的学习实例总结

    工作中遇到了contentprovider数据共享机制,下面来总结一下: 一.ContentProvider简介       当应用继承ContentProvider类,并重写该类用于提供数据和存储数 ...

  3. loadrunner中定义数组

    loadrunner 中数组的定义 loadrunner 中数组的定义: lr_save_string("www.google.com","website_1" ...

  4. Arduino可穿戴开发入门教程(大学霸内部资料)

    Arduino可穿戴开发入门教程(大学霸内部资料) 试读下载地址:链接:http://pan.baidu.com/s/1mg9To28 密码:z5v8 介绍:Arduino可穿戴开发入门教程(大学霸内 ...

  5. c/c++ 笔试面试题

    #include <iostream> using namespace std; class A { public: void sayHi(){ cout<<"hel ...

  6. 【Vijos】1792 摆花

    题目链接:https://vijos.org/p/1792 算法:DP 看到这题真的一点不会...只能爆搜一下..但太太慢了..看了题解后,听说是分组背包??不知道.. 好吧,,还是百度了下题解,渐渐 ...

  7. POJ 1691 Painting A Board(迭代深搜)

    题目链接 调了一上午,单步的效率太低了,特别是在有递归的情况下...下午来了,输出调试了下,就发现bug了,各种混乱啊. 比较高兴的事,1Y了.本来还准备用edge1优化一下的,结果完全没用到.. # ...

  8. winform学习-----理解小概念-20160518

    一.设置滚动,滚动列遮住内容的解决办法 1.datagridview三个属性:autosizecolumsmode none autosizeRowsmode   none dock  fill 2. ...

  9. JS中Date对象getYear()方法和getFullYear()方法区别

    释义 JavaScript getFullYear() 方法 getFullYear() 方法可返回一个表示年份的 4 位数字. getYear() 语法 dateObject.getFullYear ...

  10. placeholder在不同浏览器下的表现及兼容方法

    1.什么是placeholder?    placeholder是html5新增的一个属性,当input或者textarea设置了该属性后,该值的内容将作为灰字提示显示在文本框中,当文本框获得焦点(或 ...