#排它锁 要等待?
#session1 会话1
start transaction;
update feedback set title='10:20' where id =1;#排它锁
COMMIT; #提交事务
#session2 会话2
start transaction;
select * from feedback where id=1;
update feedback set title='10:01' where id =1 ;#排它锁#是否要等待读锁完成?
COMMIT; #提交事务
select * from feedback where id=1 for update;#这个属于读锁吗?
前提:在事务中
加了read读行锁,例会话1中select * from feedback where id=1 for update;
那么其他会话(事务中或非事务中都)无法执行update id=1操作,必须要会话1提交事务才可执行。这就是行锁,除id=1以外其他行都不影响update操作。
说白了:
如果用了 SELECT * FROM TABLE FOR UPDATE,或 select * from feedback where id=1 for update;
其他的TRANS或非事务就不能对以上表或行进行UPDATE了直到以上的TRAN.COMMIT.试试就知道了.
所以说,这种情况(加读、写锁)一般是针对事务隔离级别为
Read Uncommitted;
来说的,因为这个级别会出现脏读、幻读之类的(但并发性能比较快些)。
#session1 会话1
start transaction;
select * from feedback where id<10 for update;#这个属于读锁
COMMIT; #提交事务
#session2 会话2
start transaction;
update feedback set title='10:01' where id =8 ;#排它锁#要等待读锁完成commit
COMMIT; #提交事务
#session3 会话3
start transaction;
update feedback set title='10:01' where id =12 ;#排它锁#不要等待
COMMIT; #提交事务