浅析Mysql 数据回滚错误的解决方法


Posted in PHP onAugust 05, 2013

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 ***************/
$conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!");
mysql_select_db('test',$conn);
mysql_query("set names 'GBK'"); //使用GBK中文编码;
//开始一个事务
mysql_query("BEGIN"); //或者mysql_query("START TRANSACTION");
$sql = "INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, 'test1', '0')";
$sql2 = "INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, 'test1', '0')";//这条我故意写错
$res = mysql_query($sql);
$res1 = mysql_query($sql2);  
if($res && $res1){
mysql_query("COMMIT");
echo '提交成功。';
}else{
mysql_query("ROLLBACK");
echo '数据回滚。';
}
mysql_query("END");

/*方法二*/
/**************** transaction--2 *******************/
mysql_query("SET AUTOCOMMIT=0"); //设置mysql不自动提交,需自行用commit语句提交
$sql = "INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, 'test1', '0')";
$sql2 = "INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, 'test1', '0')";//这条我故意写错
$res = mysql_query($sql);
$res1 = mysql_query($sql2);  
if($res && $res1){
mysql_query("COMMIT");
echo '提交成功。';
}else{
mysql_query("ROLLBACK");
echo '数据回滚。';
}
mysql_query("END"); //事务处理完时别忘记mysql_query("SET AUTOCOMMIT=1");自动提交
PHP 相关文章推荐
php读取javascript设置的cookies的代码
Apr 12 PHP
PHP的explode和implode的使用说明
Jul 17 PHP
PHP句法规则详解 入门学习
Nov 09 PHP
PHP 日,周,月点击排行统计
Jan 11 PHP
Apache服务器无法使用的解决方法
May 08 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
PHP中nowdoc和heredoc使用需要注意的一点
Mar 21 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
Sep 24 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
php判断是否为ajax请求的方法
Nov 29 PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 #PHP
php多层数组与对象的转换实例代码
Aug 05 #PHP
注意:php5.4删除了session_unregister函数
Aug 05 #PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 #PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 #PHP
基于php中使用excel的简单介绍
Aug 02 #PHP
PHP自动识别字符集并完成转码详解
Aug 02 #PHP
You might like
帖几个PHP的无限分类实现想法~
2007/01/02 PHP
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
vuex 的简单使用
2018/03/22 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
大学生自荐书范文
2015/03/05 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
运动会致辞稿
2015/07/29 职场文书
《火烧云》教学反思
2016/02/23 职场文书