浅析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 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
WIN98下Apache1.3.14+PHP4.0.4的安装
Oct 09 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Jan 27 PHP
javascript,php获取函数参数对象的代码
Feb 03 PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 PHP
smarty中英文多编码字符截取乱码问题解决方法
Oct 28 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
php+ajax实现无刷新的新闻留言系统
Dec 21 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
PHP使用DOM对XML解析处理操作示例
Jul 04 PHP
Yii框架常见缓存应用实例小结
Sep 09 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 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
php+javascript的日历控件
2009/11/19 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php bootstrap实现简单登录
2016/03/08 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
PHP的重载使用魔术方法代码实例详解
2021/02/26 PHP
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
javascript数组去重小结
2016/03/07 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
党校自我鉴定范文
2013/10/02 职场文书
奶茶专卖店创业计划书
2014/01/18 职场文书
简历上的自我评价
2014/02/03 职场文书
美术毕业生求职信
2014/02/25 职场文书
英语老师推荐信
2014/02/26 职场文书
大学生见习报告总结
2014/11/04 职场文书
公务员个人总结
2015/02/12 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
停车场管理制度范本
2015/08/05 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
sql server 累计求和实现代码
2022/02/28 SQL Server
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL