Welcome 微信登录

首页 / 数据库 / MySQL / MySQL中select * for update锁表的问题

先前介绍过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)
表情: 姓名: 字数