mysql锁-for update
2015-07-01 13:48
567 查看
文档:
SELECT ... FOR UPDATE sets an exclusive lock on the rows read. An exclusive
lock prevents other sessions from accessing the rows for reading or writing.
阻止其他session的读写锁,排他锁,在读取的行上面
第一次执行输出
execute...
execute over....
后面的==== over ====并没有输出
接着再执行一次
结果只输出execute...
等待一段时间后,脚本执行完毕(MySQL有死锁检查机制, 自动释放锁)
如果我们放开注释commit再试一试。
SELECT ... FOR UPDATE sets an exclusive lock on the rows read. An exclusive
lock prevents other sessions from accessing the rows for reading or writing.
阻止其他session的读写锁,排他锁,在读取的行上面
# coding=utf8 import MySQLdb conn1 = MySQLdb.connect(host="127.0.0.1", user="root", passwd="root", db="app", charset='utf8') conn2 = MySQLdb.connect(host="127.0.0.1", user="root", passwd="root", db="app", charset='utf8') cur1 = conn1.cursor(MySQLdb.cursors.DictCursor) cur2 = conn2.cursor(MySQLdb.cursors.DictCursor) sql1 = "select prize_id from crazy_prizes where prize_value = 1 and is_sent = 0 limit 1 for update" print "execute..." cur1.execute(sql1) print "execute over...." rs = cur1.fetchone() prize_id = rs.get("prize_id") # update crazy_prizes set is_sent = 1 where prize_id = {prize_id} print prize_id # conn1.commit() # release lock sql2 = "select prize_id from crazy_prizes where prize_value = 2" cur2.execute(sql1) # sql1 换成sql2 就不会等待锁了, 因为行锁,这行并有锁 rs2 = cur2.fetchall() print "==== over ===="
第一次执行输出
execute...
execute over....
后面的==== over ====并没有输出
接着再执行一次
结果只输出execute...
等待一段时间后,脚本执行完毕(MySQL有死锁检查机制, 自动释放锁)
如果我们放开注释commit再试一试。
相关文章推荐
- MySQL 自增列插入0值的方法
- 比较全面的MySQL优化参考(上篇)
- mysql delete 语句中使用别名 alias
- 比较全面的MySQL优化参考(下篇)
- Mysql复制表格
- mysql 索引过长1071-max key length is 767 byte
- mysql 存储过程需要DELIMITER
- perl DBI模块和DBD-mysql模块安装
- nodejs 操作mysql数据库(最新版本)
- mysql -- 一次执行多条sql语句
- 解决连接MySql速度慢的方法
- 4.MySQL程序概述
- MySQL基础笔记(二) 完整性约束
- MySQL基础笔记(二) 完整性约束
- MySQL-Proxy实现MySQL读写分离
- mysql怎么让一个存储过程定时执行
- MYSQL学习2数据库-表-字段
- MYSQL笔记1安装
- jsp页面值存入mySql数据库乱码问题 总结 很实用!!!
- MySQL错误代码大全