表以InnoDB方式建立
一:
Select for update语句的使用,一定要再BEGIN/COMMIT之间,但可以不需要update语句。比如:
BEGIN;select lockTblId, status from locktblwhere lockTblId='pubIPFlow' for update; ----表示锁住了。
Commit; -----表示解锁了。
二:
当对同一行进行第二次selectfor update时,第二次的将会等在那。除非第一次的被commit了,或者遇到了别的行的selectfor update,第一次的就会被自动解锁。比如下面的:
BEGIN;select lockTblId, status fromt_ossres_locktbl where lockTblId='pubIPFlow' for update; ---- pubIPFlow这行被锁定
BEGIN;select lockTblId, status fromt_ossres_locktbl where lockTblId='ffftt' for update;
----ffftt这行执行了selectforupdate,则pubIPFlow这行就自动解锁了。
BEGIN;select lockTblId, status fromt_ossres_locktbl where lockTblId='pubIPFlow' for update; ---- 再次执行,也可以直接获取到数据。
三:
被select forupdate了的记录,使用select去选择不受影响。
四:
当一个记录被锁定后,第二次使用select for update来查询这条记录时的超时时间由innodb_lock_wait_timeout=10这个配置来控制,单位是秒,放my.ini下的[mysqld]下面。
本文详细介绍了InnoDB存储引擎下SELECT FOR UPDATE语句的使用方法及其特性,包括如何锁定记录、锁定记录的自动解锁条件及超时时间设置。
1万+

被折叠的 条评论
为什么被折叠?



