一、锁
锁是数据库用来控制共享资源并发访问的机制。锁用于保护正在被修改的数据,只到提交或回滚了事务之后,其他用户才可以更新数据。
1、锁的优点
- 一致性:一次只允许一个用户修改数据
- 完整性:为所有用户提供正确的数据。如果一个用户进行了修改并保存,所有的修改将反映给所有用户。
- 并行性:允许多个用户访问同一数据。一个用户修改表,其他用户可以查看,但不能修改
2、锁的类型
(1)行级锁
对正在修改的行进行锁定。其他用户可以访问其他未被修改的行。行级锁是一中排他锁,防止其他用户修改此行。 使用“INSERT”、“UPDATE”、“DELETE”、“SELECT … FOR UPDATE”语句时,会自动应用行级锁,使用“COMMIT”、“ROLLBACK”语句释放锁。“SELECT … FOR UPDATE”语句允许用户一次锁定多行进行更新。
(2)表级锁
锁定整个表,限制其他用户对表的访问。 使用表级锁的语法:
lock table 表名 in 锁类型 mode
表级锁的类型有如下5种,限制依次增多。 行共享(ROW SHARE):禁止其他用户使用排他(EXCLUSIVE)锁定表。其他用户可以插入、更新和删除行 行排他( ROW EXCLUSIVE):禁止其他用户使用排他锁和共享锁。 共享锁(SHARE):锁定表,仅允许其他用户查询表中的行,禁止其他用户插入、更新和删除行。多个用户可以同时在一个表上应用此锁。 共享行排他(SHARE ROW EXCLUSIVE):比共享锁更多的限制,禁止其他用户使用共享锁及排他锁。 排他(EXCLUSIVE):限制最强的表锁,仅允许其他用户查询该表的行,禁止修改和锁定表。
3、死锁
当两个事务相互等带对方释放资源时,就会形成死锁。 Oracle会自动检测死锁,并通过结束其中一个事务来解决死锁。
|