Oracle 锁表

来源:互联网 发布:中欧工程技术学院知乎 编辑:程序博客网 时间:2024/05/01 02:04

Oracle锁表

今天在公司用ibaitis对数据表进行更新操作的时候发现如下Bug:

SQL语句正常,拼接参数正常,运行更新操作时阻塞,程序一直不跑。最后发现是我在Oracle中查找数据的时候使用了select for update(造成了行级锁),所以更新操作一直卡在那里不动。

普及一下数据库中的锁

  1. 数据库中的锁有基本的两类,共享锁和排他锁,共享锁是其他事务不能对当前事务加了共享锁的表进行更新,只可以读;排他锁是任何操作都不能进行。
  2. 行级锁和表级锁,Oracle中使用update,insert…for update;会造成该行的数据加锁,从而别的事务不能进行修改等操作。
  3. 解除行级锁,回滚当前事务,或杀死加锁进程。 (加锁操作是当前事务进行的,所以回滚当前事务就可以撤销加锁的操作)