For update
1 select * from hjh for update [of hjh.a]; 锁定表的所有行
可以select,insert,不可以update,Delete Commit提交后,解除锁定
2 SELECT * FROM hjh WHERE a = 1 FOR UPDATE [of hjh.a]; 只锁定a=1的行
3 SELECT a.a, t1.d FROM hjh a, t1 WHERE a.a = t1.c [and a.a = 2] FOR UPDATE; 锁定两个表的中满足条件的行
4 SELECT a.a, t1.d FROM hjh a,t1 WHERE a.a = t1.c [and a.a = 2] FOR UPDATE OF a.a; 只锁定hjh中满足条件的行
加行级共享锁,然后以独占方式进行修改数据(update,delete),
你FOR UPDATE 的时候 ,其他人不能更改你查询出来的记录
commit和rollback都可以释放锁
DML锁包括table-level locks(TM)和Row-level locks(TX)
说明row-level lock(TX type)是为了确保其它用户不可以在相同的时间修改相同的行
TM 是对象锁,表示可能在这个对象上做了什么操作,还没有结束,所以不允许ddl
TX 是事务锁,表示发起了一个事务,发起事务的判别标准