浅析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 相关文章推荐
第六节 访问属性和方法 [6]
Oct 09 PHP
如何在PHP中进行身份认证
Oct 09 PHP
PHP学习之数组的定义和填充
Apr 17 PHP
与文件上传有关的php配置参数总结
Jun 14 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
May 13 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
PHP实现导出带样式的Excel
Aug 28 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
Sep 30 PHP
PHP cookie与session会话基本用法实例分析
Nov 18 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
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
PHP中调用JAVA
2006/10/09 PHP
php上传、管理照片示例
2006/10/09 PHP
php 常用类整理
2009/12/23 PHP
php for 循环语句使用方法详细说明
2010/05/09 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
jquery事件的ready()方法使用详解
2015/11/11 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python中暂存上传图片的方法
2015/02/18 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
Python缓存技术实现过程详解
2019/09/25 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
Python实现数字的格式化输出
2020/08/01 Python
python计算auc的方法
2020/09/09 Python
如何用Python绘制3D柱形图
2020/09/16 Python
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
乔迁之喜主持词
2014/03/27 职场文书
优质服务活动实施方案
2014/05/02 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
苏州园林导游词
2015/02/03 职场文书
投资合作意向书范本
2015/05/08 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
python+opencv实现视频抽帧示例代码
2021/06/11 Python