一.mysql的事务
mysql的事务有两种方式:
1.SET AUTOCOMMIT=0;也就是关闭了自动提交,那么任何commit或rollback语句都可以触发事务提交;如果SET AUTOCOMMIT=1;也就是开启了自动提交(默认值),那么必须要以begin或者START TRANSACTION声明事务的开始,然后再以commit或rollback语句都可以触发事务提交

$db->query('SET autocommit=0');
$db->query('update member set money=money+'.$money.' where memberId='.$memberId);
$db->query('insert into mem_log(money) values('.$money.')');
$db->query('commit');
$db->query('insert into test(str) values('.sql_encode($msg).')');//该条数据无法插入。因为autocommit=0

注意,在事务结束。要恢复autocommit的值。

2.显示打开一个事务,就比上面的方法要简单些,不需要设置autocommit的值,也不用在事务结束后恢复autocommit的值。即,如果想保留autocommit开关打开,则通过begin或者START TRANSACTION声明事务,声明后,autocommit开关将会被禁用,直到您使用COMMIT或ROLLBACK结束事务为止,事务结束,autocommit开关将被打开。

$db->query('START TRANSACTION');  
$db->query('update member set money=money+'.$money.' where memberId='.$memberId);  
$db->query('insert into mem_log(money) values('.$money.')');  
$db->query('commit');  
$db->query('insert into test(str) values('.sql_encode($msg).')');//该条数据可以插入

二.SELECT...FOR UPDATE
1.SELECT...FOR UPDATE用在事务中,处于begin和commit段内。该项将会锁定行,直到其他事务更新该行后才进行查询。这将保证数据更改的唯一性
注:文档说对myisam无效,但在实际测试中发现使用该语句,500个线程并发查询时,依然可以保证唯一性,原因不明。

2.在以下情况下,SELECT...FOR UPDATE讲锁定整个InnoDB表:
WHERE条件的字段不是主键,或用LIKE限定主键,或主键处于某一范围内,如<>

最新文章

  1. 2013ACM/ICPC亚洲区南京站现场赛---Poor Warehouse Keeper(贪心)
  2. AppleWatch___学习笔记(二)UI布局和UI控件
  3. Spring基础知识汇总
  4. maven integration with eclipse 3.0.4 does not work with NTLM proxy
  5. 通过SessionID和用户名来保证同一个用户不能同时登录(单点登录)
  6. iOS添加Prefix Header
  7. Android ViewFlipper控件实例
  8. docker 挂在本地目录
  9. jQuery中 $ 符号的冲突问题
  10. 端口扫描器之java实现
  11. javascript 随机显示指定内容
  12. memcached一致性哈希及php客户端实现
  13. Mysql的安装和图形化界面的使用
  14. JavaSE学习(二):进制转换—数据类型转换—Java运算符
  15. HTML-CSS线性渐变
  16. ArcGIS案例学习笔记2_1_学校选址适宜性分析
  17. linux-如何快速替换IP
  18. 配置MySQL 5.6的主从复制
  19. VCP考试系统
  20. 电梯调度系统(界面由C图形库编绘)

热门文章

  1. laravel框架session使用教程
  2. hdu 4001 dp 2011大连赛区网络赛A
  3. nohup之no hang up, kill, ps -ef, ps aux, grep
  4. 5个让你的SaaS应用大卖的技巧
  5. Hark的数据结构与算法练习之简单选择排序
  6. Web安全测试之XSS
  7. POJ3659 Cell Phone Network(树上最小支配集:树型DP)
  8. BZOJ3789 : 扫雪车
  9. vnc使用
  10. Java IO操作