PHP与MYSQL事务处理

/*
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");自动提交

/******************对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法:********************/

//MyISAM & InnoDB 都支持,
/*
LOCK TABLES可以锁定用于当前线程的表。如果表被其它线程锁定,则造成堵塞,直到可以获取所有锁定为止。
UNLOCK TABLES可以释放被当前线程保持的任何锁定。当线程发布另一个LOCK TABLES时,或当与服务器的连接被关闭时,所有由当前线程锁定的表被隐含地解锁。
*/

mysql_query("LOCK TABLES `user` WRITE");//锁住`user`表
$sql = "INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, 'test1', '0')";
$res = mysql_query($sql);
if($res){
echo '提交成功。!';
}else{
echo '失败!';
}
mysql_query("UNLOCK TABLES");//解除锁定

转载于:https://www.cnblogs.com/laiwei85/archive/2011/11/12/2246347.html

php与mysql事物处理相关推荐

  1. mysql事物及事物等级_MySQL事物原理及事务隔离级别

    mysql事物 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取.事务的正确执行使得数据库从一种状态转换为另一种状态. 事务必须服从ISO/IEC所制定的ACID原则.AC ...

  2. mysql事物sql语句死锁,定时任务启动失败Lock wait timeout exceeded;try restarting transaction

    把定时任务quartz配置mysql里多台机器启动时可能会出现数据库死锁,然后控制台报错: Lock wait timeout exceeded:try restarting transaction ...

  3. MySQL事物-学习笔记

    前言 在梳理 MySQL 事物和锁这一块知识的时候,发现其实自己了解的只是冰山一角,经过认真的查阅和研究之后,其实这一块的知识其实还真的有很多的学问. 所以后面还是需要研读一下<高性能MySQL ...

  4. MySQL事物系列:1:事物简介

    1:事物是一组SQL的集合,要么都执行,要么都不执行.有ACID4个特性,即:原子性.一致性.隔离性.持久性. A(Atomicity)原子性:整个事物是不可分割的工作单位. C(consistenc ...

  5. mysql 事物状态有几种_MySQL知识点汇总:亿级高并发数据库运转原理大公开!

    - 点击上方"中国统计网"订阅我吧!- 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离... 数据库的使用,是开发人员的基本功,对 ...

  6. mysql事物 总结_Mysql事务总结

    数据库 事务的特性ACID 事务(Transaction)是并发控制的基本单位. 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐 ...

  7. MySQL事物(详解并发问题和隔离级别)(小白也能懂哦)

    1.事物的概念 2.事物的四大特性(ACID) 3.事物的创建 4.事物的并发问题和解决 5.回滚点 6.事物的适用模式 1.事物的概念 事物由单独单元的一个或者多个SQL语句组成,在这个单元中,每个 ...

  8. mysql 事物状态有几种_mysql第三章 事务以及日志

    mysql第三章 事务以及日志 一. 事物简介 每条DDL DCL语句都是事务. 每个begin 到coomit语句是一个事务 二. 事物特性ACID以及开启方式 1. 原子性(A),部成功执行或全部 ...

  9. mysql 事物状态有几种_10分钟梳理MySQL核心知识点

    数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离... 今天我们用10分钟 ...

  10. springboot mysql事物_springboot如何开启数据库事务

    springboot开启事务很简单,只需要一个注解@Transactional 就可以了.因为在springboot中已经默认对jpa.jdbc.mybatis开启了事事务,引入它们依赖的时候,事物就 ...

最新文章

  1. 超越谷歌BERT!依图推出预训练语言理解模型ConvBERT,入选NeurIPS 2020
  2. 047_BOM_DOM
  3. 利用Python模拟鼠标自动完成MM32-LINK程序下载
  4. 杜甫在线演唱《奇迹再现》、兵马俑都能开口说话……微博网友用AI技术分分钟打破次元壁...
  5. ssh在dhcp自动获取地址的时候使用
  6. hadoop2.7之Mapper/reducer源码分析
  7. datalength,求字符串的字节数
  8. CXF 调用C#.net的WebService
  9. STM32H743+CubeMX-定时器TIM输出PWM(PWM Generation模式)
  10. mediarecorder路径设置为localsocket_PR学习之旅:pr怎么才能定位和修改视频保存路径,操作很简单...
  11. 取出字符串strName前4个汉字
  12. 设置Qt直接运行路径
  13. live2d_基于Qt的Live2D示例(几乎都是官方给的代码就是啦!)
  14. Linux下pip安装教程
  15. 我从Python新手到大师的百天之路(内附学习资源)
  16. 用纯CSS实现优惠券剪卡风格
  17. RuntimeError CUDA environment is not correctly set up
  18. Datawhale组队学习周报(第025周)
  19. less面试_想获得理想工作?面试时千万不要说这七句话
  20. 邮件群发平台_招聘平台挑选邮件群发平台时应该注意什么

热门文章

  1. FISCO BCOS Solidity 智能合约 返回多个值
  2. 初创团队配置_咨询整理(熊猫TV首席架构师)
  3. php之thinkphp3.2.3 文件访问路径,URL路由配置-与重定向
  4. Dubbo 优雅停机演进之路
  5. ubuntu 14.04中安装Jenkins
  6. 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_1 请求参数绑定入门
  7. 阶段3 1.Mybatis_12.Mybatis注解开发_8 mybatis注解开发使用二级缓存
  8. linux查看文件的编码格式的方法 set fileencoding PYTHON
  9. bzoj 1019: [SHOI2008]汉诺塔
  10. python+selenium+Firefox+pycharm版本匹配