记得前段时间面试时一面试官就问到 Oracle如何锁住单条记录的,当时自己不是在想答案,而是靠还有这么问这么变态的问题,对于没用过Oracle的我一头雾水,更别答案了,今天用到这个顺便记录下,废话不多说进入正题:
单表加锁
1.用scott用户登录 查询emp表并锁定:select t.*, t.rowid from emp t for update
2.然后用其他用户登录,再进行更改emp表中的数据会提示表已被其他用户锁定
如果scott用户无论rollback还是commit都能使emp表的锁释放,此时 其他用户就可以操作了
锁住单行
1.同样用scott用户登录只加where条件便可达目的 :select t.*, t.rowid from emp t where empno=7369 for update ;
2.然后用其他用户登录,再进行更改emp表中的empno=7369和其它数据对比 会看到只有本行被锁住
如果scott用户无论rollback还是commit都能使empno=7369这条记录的锁释放,此时 其他用户就可以操作了此条记录了