Oracle锁表
今天在公司用ibaitis对数据表进行更新操作的时候发现如下Bug:
SQL语句正常,拼接参数正常,运行更新操作时阻塞,程序一直不跑。最后发现是我在Oracle中查找数据的时候使用了select for update(造成了行级锁),所以更新操作一直卡在那里不动。
普及一下数据库中的锁
- 数据库中的锁有基本的两类,共享锁和排他锁,共享锁是其他事务不能对当前事务加了共享锁的表进行更新,只可以读;排他锁是任何操作都不能进行。
- 行级锁和表级锁,Oracle中使用update,insert…for update;会造成该行的数据加锁,从而别的事务不能进行修改等操作。
- 解除行级锁,回滚当前事务,或杀死加锁进程。 (加锁操作是当前事务进行的,所以回滚当前事务就可以撤销加锁的操作)