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. Spring获取ApplicationContext方式,和读取配置文件获取bean的几种方式

    转自:http://chinazhaokeke.blog.163.com/blog/static/109409055201092811354236  Spring获取ApplicationContex ...

  2. 一个快速、高效的Levenshtein算法实现

    转自:http://www.cnblogs.com/ymind/archive/2012/03/27/fast-memory-efficient-Levenshtein-algorithm.html ...

  3. SQL2005备份数据库到远程服务器中

    --打开高级设置EXEC sp_configure 'show advanced options', 1RECONFIGURE--打开xp_cmdshell扩展存储过程EXEC sp_configur ...

  4. 资产移动盘点手持机PDA系统

    手持机PDA系统功能 PDA初始化 从后台管理机系统中预先设置的众多操作人员列表中下载当前PDA的使用人员: 系统支持多用户使用同一台PDA情况下的用户认证登陆,每一用户根据后台管理机系统设置与安全管 ...

  5. D6 I

    I - I Time Limit:1000MS     Memory Limit:2048KB     64bit IO Format:%lld & %llu Submit Status Pr ...

  6. Codeforces Round #292 (Div. 2)

    A. Drazil and Date 无算法,判断(s - (a + b)) % 2是否为零,若零,表示在s步内还能走向其他的地方并且回来 否则,都是No #include <cstdio> ...

  7. HDU1116 Play on Words(有向图欧拉通路)

    我把单词当作点,然后这样其实是不对的,这样就要判定是否是哈密顿通路.. 这题应该把单词的首尾单词当作点,而单词本身就是边,那样就是判定欧拉通路了. 有向图包含欧拉通路的充要条件是:首先基图连通,然后是 ...

  8. BZOJ3075 : [Usaco2013]Necklace

    首先对b串做kmp求出nxt数组. 设f[i][j]表示考虑了a的前i个字符,在b中匹配到了j的最长长度,按照kmp算法直接转移即可. $ans=n-\max(f[n][j])$. 时间复杂度$O(n ...

  9. BZOJ3832 : [Poi2014]Rally

    f[0][i]为i出发的最长路,f[1][i]为到i的最长路 新建源汇S,T,S向每个点连边,每个点向T连边 将所有点划分为两个集合S与T,一开始S中只有S,其它点都在T中 用一棵线段树维护所有连接属 ...

  10. OpenCV 2.4.10 Linux Qt Conifguration

    Download CMake 2.8.12 Extract the file, and run "./bootstrap", then "make", then ...