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. awk命令

    awk 手册   原文 Table of Contents 1. awk简介 2. awk命令格式和选项 2.1. awk的语法有两种形式 2.2. 命令选项 3. 模式和操作 3.1. 模式 3.2 ...

  2. node基础 --全局

    全局对象: global:永远使用var 定义变量以避免引入全局变量; process:所有全局执行上下文的内容都在process对象中: 模块和包: 模块:一个Node.js 文件就是一个模块,这个 ...

  3. 理解Null,Undefined,NAN

    1.null表示尚未存在的对象,转为数值时为0.它表示"没有对象",即该处不应该有值,常用来表示函数企图返回一个不存在的对象.null是一种特殊的object(引用类型),代表一个 ...

  4. spring实战一:装配bean之注入Bean属性

    内容参考自spring in action一书. 创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入的本质. 1. 创建spring配置 spring是一个基于容器的框架.如果没有配置spri ...

  5. 简单几何(数学公式+凸包) UVA 11168 Airport

    题目传送门 题意:找一条直线,使得其余的点都在直线的同一侧,而且使得到直线的平均距离最短. 分析:训练指南P274,先求凸包,如果每条边都算一边的话,是O (n ^ 2),然而根据公式知直线一般式为A ...

  6. java.lang.RuntimeException: Invalid action class configuration that references an unknown class named [xxxAction]。

    java.lang.RuntimeException: Invalid action class configuration that references an unknown class name ...

  7. android怎样调用@hide和internal API

    android怎样调用@hide和internal API 2012-12-11 16:21 8772人阅读 评论(3) 收藏 举报  分类: Android开发(277)  Android有两种类型 ...

  8. [百科] - CreatePen()

    CreatePen编辑[声明]HPEN CreatePen(int nPenStyle, int nWidth, COLORREF crColor);[说明]用指定的样式.宽度和颜色创建一个画笔[参数 ...

  9. IOS第四天(6:答题区按钮点击和乱序)

    #pragma mark - 答题区按钮点击方法 - (void)answerClick:(UIButton *)button { // 1. 如果按钮没有字,直接返回 ) return; // 2. ...

  10. 安装Bind过程中提示丢失MSVCR110.dll的解决办法

    前几天在线安装Visual Studio 2012 Update 3,由于在线安装需要不断下载安装文件,时间很长,后来等不下去,就取消了,不幸的是VS启动不了了,弹出“devenv.exe – 系统错 ...