浅析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网站基础优化方法小结
Sep 29 PHP
PHP中使用CURL伪造来路抓取页面或文件
May 04 PHP
微信扫描二维码登录网站代码示例
Dec 30 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 PHP
php基于base64解码图片与加密图片还原实例
Nov 03 PHP
php示例详解Constructor Prototype Pattern 原型模式
Oct 15 PHP
php处理json格式数据经典案例总结
May 19 PHP
浅谈PHP中的错误处理和异常处理
Feb 04 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
PHP中PCRE正则解析代码详解
Apr 26 PHP
tp5修改(实现即点即改)
Oct 18 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 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 中的一些经验积累
2006/10/09 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
Python中基本的日期时间处理的学习教程
2015/10/16 Python
使用Python来开发Markdown脚本扩展的实例分享
2016/03/04 Python
浅谈django model postgres的json字段编码问题
2018/01/05 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
python制作简单五子棋游戏
2019/06/18 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
JNI的定义
2012/11/25 面试题
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
病危通知书样本
2015/04/17 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
Golang 并发编程 SingleFlight模式
2022/04/26 Golang