浅析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 相关文章推荐
BBS(php & mysql)完整版(七)
Oct 09 PHP
PHP新手上路(三)
Oct 09 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
Nov 07 PHP
比file_get_contents稳定的curl_get_contents分享
Jan 11 PHP
php获取服务器信息的实现代码
Feb 04 PHP
php对包含html标签的字符串进行截取的函数分享
Jun 19 PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 PHP
使用YUI+Ant 实现JS CSS压缩
Sep 02 PHP
php中Y2K38的漏洞解决方法实例分析
Sep 22 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 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
PHPShop存在多个安全漏洞
2006/10/09 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
js取消单选按钮选中并判断对象是否为空
2013/11/14 Javascript
node.js中的fs.readSync方法使用说明
2014/12/17 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
原生js实现轮播图
2017/02/27 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
python交互界面的退出方法
2019/02/16 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
薇姿法国官网:Vichy法国
2021/01/28 全球购物
应聘美工求职信
2013/11/07 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
小学生美德少年事迹
2014/02/02 职场文书
小学生竞选班干部演讲稿
2014/04/24 职场文书
霸气队列口号
2014/06/18 职场文书
会议欢迎标语
2014/06/30 职场文书
付款委托书范本
2014/10/05 职场文书
工会工作个人总结
2015/03/03 职场文书
《灰雀》教学反思
2016/02/19 职场文书
用Python可视化新冠疫情数据
2022/01/18 Python