表以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]下面。