浅析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脚本的10个技巧(1)
Oct 09 PHP
php5 mysql分页实例代码
Apr 10 PHP
php下载远程文件类(支持断点续传)
Nov 14 PHP
php 异常处理实现代码
Mar 10 PHP
一个比较简单的PHP 分页分组类
Dec 10 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
Jan 07 PHP
php计划任务之ignore_user_abort函数实现方法
Jan 08 PHP
简单的pgsql pdo php操作类实现代码
Aug 25 PHP
PHP实现对二维数组某个键排序的方法
Sep 14 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
PHP常量define和const的区别详解
May 18 PHP
实例化php类时传参的方法分析
Jun 05 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中的数组操作函数整理
2008/08/18 PHP
深入apache host的配置详解
2013/06/09 PHP
详解PHP错误日志的获取方法
2015/07/20 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
AngularJS创建自定义指令的方法详解
2016/11/03 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
Python生成器以及应用实例解析
2018/02/08 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
Python 爬虫性能相关总结
2020/08/03 Python
python eventlet绿化和patch原理
2020/11/21 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
淘宝客服自我总结鉴定
2014/01/25 职场文书
酒店大堂副理的职责范文
2014/02/13 职场文书
大学军训感言800字
2014/02/27 职场文书
颁奖典礼主持词
2014/03/25 职场文书
初三开学计划书
2014/04/27 职场文书
车贷收入证明范本
2014/09/14 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
学生上课说话检讨书
2014/10/25 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
《观潮》教学反思
2016/02/17 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技