oracle 给表加锁
lock table 表名 exclusive mode nowait; -- 锁整个表
select * from 表名 where XXX for update nowaitl -- 锁符合条件的记录
使用for update 对表进行锁行操作
--查询锁定记录,这条SQL没有认真研究,只是知道它可以查出数据库中哪些session中含有锁?
SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;
--kill掉带锁的session
ALTER system KILL session 'SID,serial#'
update语句同理
上边的例子都是在查询时加上for update来加锁,如果是更新的时候呢。其实是一样的,通过试验发现,当我们在session1中操作一条update语句(但是不commit)时,在session2中是无法更新这条数据的,原因就是这条数据已经被session1加上了锁,只有在session1提交或放弃锁后,session2才可以更新这条数据。