先前介绍过SELECT ... FOR UPDATE的用法,不过锁定(Lock)的资料是判别就得要注意一下了。由于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; 例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列出某个月或是已知日期范围内的所有日期SELECT FOR UPDATE 相关的知识相关资讯 MySQL教程 MySQL手册
- 30分钟带你快速入门MySQL教程 (02月03日)
- MySQL教程:关于I/O内存方面的一些 (01月24日)
- CentOS上开启MySQL远程访问权限 (01/29/2013 10:58:40)
| - MySQL教程:关于checkpoint机制 (01月24日)
- MySQL::Sandbox (04/14/2013 08:03:38)
- 生产环境MySQL 5.5.x单机多实例配 (11/02/2012 21:02:36)
|
本文评论 查看全部评论 (0)