锁的概念
- 锁是数据库用来控制共享资源并发访问的机制
- 锁是用于保护正在修改的数据
- 提交或者回滚事务之后,其他用户才可以更新数据
锁的优点
一致性:一次只允许一个用户修改数据
完整性:为所有用户提供正确的数据,如果一个用户进行了修改并保存,所做的修改反映给所有用户
并行性:允许多个用户访问同一数据
行级锁
对正在被修改的行进行锁定,其他用户可以访问除被锁定的行以外的行
在使用以下语句时,oracle会自动应用行级锁
- INSERT
- UPDATE
- DELETE
- SELECT … FOR UPDATE 允许用户一次锁定多条记录进行更新
使用COMMIT或者ROLLBACK释放锁
使用动态视图v$lock查看锁
表级锁
- 锁定整个表,限制其他用户对表的访问
- 共享锁 (ROW SHARE):禁止拍他锁定表
- 行排锁(ROW EXCLUSIVE):禁止使用拍他锁和共享锁
- 共享锁(SHARE)
- 锁定表,仅允许其他用户查询表中数据
- 禁止其他用户插入、更新、删除行
- 多个用户可以同时在同一个表上应用此锁
- 共享行拍他锁(SHARE ROW EXCLUSIVE):禁止使用共享锁及高级锁
- 排他(EXCLUSIVE):限制最高的锁,仅允许用户查询该表的行,禁止修改和锁定表。
死锁
- 当两个事务互相等待对方释放资源时
- Oracle会自动检测死锁,并通过结束其中一个事务来解决死锁。