日期:2014-05-17  浏览次数:20926 次

【问题很严重啊——死要死个明白】关于FOR UPDATE语句



执行语句
SELECT * FROM TABLE_A WHER FIELD_1 = 'AAAA' FOR UPDATE
;

最终查出的结果是3条记录,另,FIELD_1是主键中的第一个字段

执行了之后干别的事去了,约5~6个小时之后,发现表被锁了,而且是我锁的(之间再也没有对该表进行操作,好像也没再用SQL操作过数据库),回滚之后就好了,FOR UPDATE也会锁表???不是锁行的吗

由于涉及到责任重大,不说不行,咱死不怕,不过要死要死个明白!

------解决方案--------------------
SELECT * FROM TABLE_A WHER FIELD_1 = 'AAAA ' FOR UPDATE 
会产生两种锁,对FIELD='AAAA'的行的独占锁,不允许其他用户修改这些行
对整张表的共享锁,但是是允许其他用户修改别的行的,主要是不允许修改表结构之类
------解决方案--------------------
7楼正确。FOR UPDATE对表加SHARE LOCK(共享锁),对影响的行加EXCLUSIVE LOCK(排它锁)