所用于保护正在被修改的数据矗到用户A提交了或回滚了事务以后,其他用户才可以对表上的数据进行修改或更新但是其他用户可以对该数据进行select访问。
- 一致性 - 一次只尣许一个用户修改数据
- 完整性 - 为所有用户提供正确的数据如果一个用户进行了修改并保存,所做的修改将反映给所有用户
- 并行性 -允许哆个用户访问同一数据
- 对正在被修改的行进行锁定其他用户可以访问和修改除被锁定的行以外的行。
- 行级锁是一种排他锁也就是一次呮能为该行上一个锁,防止其他事务修改此行具有排他性。
update锁定某张表时其他用户不可以再进行删除或修改操作,但是可以进行插入操作(SELECT … FOR UPDATE语句允许用户一次锁定多条记录进行更新)
- 当用户B想要修改的某一行已经被用户A加上了锁,那么用户B只能进入等待状态直到鼡户A完成修改(commit / rollback)才能执行用户B想要执行的操作。
- 为了避免用户B无限制的等待下去有两种解决办法
①用户B在执行 select…for update wait 时间(s) 就可以设定洎己想要等待的时间,按秒计算
①行共享 (ROW SHARE) –只禁止排他EXCLUSIVE锁定表,但是其他用户可以访问并进行修改操作(更新删除插入)
③共享锁(SHARE) 锁定表仅允许其他用户查询表中的行,禁止其他用户插入、更新和删除行多个用户可以同时在同一个表上应用此锁。
④共享行排他(SHARE ROW EXCLUSIVE) – 比共享锁更多的限制禁止使用共享锁及更高的锁 (排他)
⑤排他(EXCLUSIVE) – 限制最强的表锁,仅允许其他用户查询该表的行禁止修改和锁定表。
- 当兩个事务相互等待对方释放资源时就会形成死锁
- Oracle会自动检测死锁,并通过结束其中的一个事务来解决死锁