浅析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水印
Mar 16 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
php学习笔记(三)操作符与控制结构
Aug 06 PHP
如何在symfony中导出为CSV文件中的数据
Oct 06 PHP
自定义session存储机制避免会话保持问题
Oct 08 PHP
PHP解析目录路径的3个函数总结
Nov 18 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
Jul 15 PHP
mac os快速切换多个PHP版本的方法
Mar 07 PHP
PHP简单实现遍历目录下特定文件的方法小结
May 22 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 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
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
2016/05/18 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
wxPython事件驱动实例详解
2014/09/28 Python
详解Python中where()函数的用法
2018/03/27 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
民事诉讼代理委托书
2014/10/08 职场文书
商务信函英语问候语
2015/11/10 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang