MySQL中select * for update锁表的问题
2017-02-06 18:26
141 查看
由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table
Lock (将整个资料表单给锁住)。 举个例子: 假设有个表单products ,里面有id跟name二个栏位,id是主键。
例1: (明确指定主键,并且有此笔资料,row lock)
SELECT * FROM products WHERE id='3' FOR UPDATE;
SELECT * FROM products WHERE id='3' and type=1 FOR UPDATE;
例2: (明确指定主键,若查无此笔资料,无lock)
SELECT * FROM products WHERE id='-1' FOR UPDATE;
例2: (无主键,table lock)
SELECT * FROM products WHERE name='Mouse' FOR UPDATE;
例3: (主键不明确,table lock)
SELECT * FROM products WHERE id<>'3' FOR UPDATE;
例4: (主键不明确,table lock)
SELECT * FROM products WHERE id LIKE '3' FOR UPDATE;
注1: FOR UPDATE仅适用于InnoDB,且必须在交易区块(BEGIN/COMMIT)中才能生效。
注2: 要测试锁定的状况,可以利用MySQL的Command Mode ,开二个视窗来做测试。
在MySql 5.0中测试确实是这样的
另外:MyAsim 只支持表级锁,InnerDB支持行级锁 添加了(行级锁/表级锁)锁的数据不能被其它事务再锁定,也不被其它事务修改
(修改、删除) 。是表级锁时,不管是否查询到记录,都会锁定[b]表。[/b]
Lock (将整个资料表单给锁住)。 举个例子: 假设有个表单products ,里面有id跟name二个栏位,id是主键。
例1: (明确指定主键,并且有此笔资料,row lock)
SELECT * FROM products WHERE id='3' FOR UPDATE;
SELECT * FROM products WHERE id='3' and type=1 FOR UPDATE;
例2: (明确指定主键,若查无此笔资料,无lock)
SELECT * FROM products WHERE id='-1' FOR UPDATE;
例2: (无主键,table lock)
SELECT * FROM products WHERE name='Mouse' FOR UPDATE;
例3: (主键不明确,table lock)
SELECT * FROM products WHERE id<>'3' FOR UPDATE;
例4: (主键不明确,table lock)
SELECT * FROM products WHERE id LIKE '3' FOR UPDATE;
注1: FOR UPDATE仅适用于InnoDB,且必须在交易区块(BEGIN/COMMIT)中才能生效。
注2: 要测试锁定的状况,可以利用MySQL的Command Mode ,开二个视窗来做测试。
在MySql 5.0中测试确实是这样的
另外:MyAsim 只支持表级锁,InnerDB支持行级锁 添加了(行级锁/表级锁)锁的数据不能被其它事务再锁定,也不被其它事务修改
(修改、删除) 。是表级锁时,不管是否查询到记录,都会锁定[b]表。[/b]
相关文章推荐
- JBuilder Editor中光标不能正确定位问题的解决
- 不改一行代码定位线上性能问题
- 目录横穿“(Ttaversal)”问题的解决办法
- 软件测试问题登记表
- 软件测试问题汇总表
- 软件使用问题登记表
- 升级到Delphi 6 - 兼容性问题之二
- 升级到Delphi 6 - 兼容性问题之三(完)
- 升级到Delphi 6 - 兼容性问题(中文全文)
- 如何分析问题和需求?如何界定问题主次?。。。。
- WINAMP SDK 常见问题回答(FAQ)
- 迁移到 ASP .NET:需考虑的重要问题
- jsp、servlet关于中文问题再谈
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
- XML 中的常见问题
- 一个关于#include的问题
- [导入]转贴:C++语言常见问题解:#105 ~ #120
- 绘制位图的问题
- 使用ActiveX控件开发网页常见的问题
- 如何解决visual interdev的调试问题