共享锁和排他锁了解
2018-03-27 10:35
183 查看
共享锁(S锁):共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句。
如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
排他锁(X锁):用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。
如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
简要说明为什么会发生死锁?解决死锁的主要方法是什么?
若干事务相互等待释放封锁,就陷入无限期等待状态,系统就进入死锁
解决死锁的方法应从预防和解除的两个方面着手:
(1)死锁的预防方法:
a、要求每一个事务必须一次封锁所要使用的全部数据(要么全成功,要么全不成功)
b、规定封锁数据的顺序,所有事务必须按这个顺序实行封锁。
(2)允许死锁发生,然后解除它,如果发现死锁,则将其中一个代价较小的事物撤消,回滚这个事务,并释放此事务持有的封锁,使其他事务继续运行。
oracle:
共享锁
LOCK TABLE 表 IN SHARE MODE ;
排他锁:
LOCK TABLE 表 IN EXCLUSIVE MODE ;
加锁后其它人不可操作,直到加锁用户解锁,用commit或rollback解锁
行排他锁不阻止其他Session申请表共享锁和其他行的排他锁,但阻止申请表排他锁和锁定行的任何锁。
表排他锁阻止其他Session的申请的所有锁。
表共享锁不阻止其他Session申请行排他锁和表共享锁,但阻止申请表排他锁。
一道相关的试题:
User SCOTT executes the following command on the EMP table but has not issued COMMIT,ROLLBACK, or any data definition language (DDL)ommand:
SQL> SELECT job FROM emp WHERE job=’CLERK’ FOR UPDATE OF empno;
SCOTT has opened another session to work with the database. Which three operations would wait when issued in SCOTT’s second session?(Choose three.)
A. LOCK TABLE emp IN SHARE MODE;(阻止申请行的共享锁)
B. LOCK TABLE emp IN EXCLUSIVE MODE;(阻止申请表的排他锁)
C. DELETE FROM emp WHERE job=’MANAGER’;
D. INSERT INTO emp(empno,ename) VALUES(1289,’Dick’);
E. SELECT job FROM emp WHERE job=’CLERK’ FOR UPDATE OF empno;(阻止申请行的排他锁)
SELECT …… FROM …… FOR UPDATE 语句申请的是相应行的排他锁以及行所在表的共享锁。
上题答案给的是A、B、E
如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
排他锁(X锁):用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。
如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
简要说明为什么会发生死锁?解决死锁的主要方法是什么?
若干事务相互等待释放封锁,就陷入无限期等待状态,系统就进入死锁
解决死锁的方法应从预防和解除的两个方面着手:
(1)死锁的预防方法:
a、要求每一个事务必须一次封锁所要使用的全部数据(要么全成功,要么全不成功)
b、规定封锁数据的顺序,所有事务必须按这个顺序实行封锁。
(2)允许死锁发生,然后解除它,如果发现死锁,则将其中一个代价较小的事物撤消,回滚这个事务,并释放此事务持有的封锁,使其他事务继续运行。
oracle:
共享锁
LOCK TABLE 表 IN SHARE MODE ;
排他锁:
LOCK TABLE 表 IN EXCLUSIVE MODE ;
加锁后其它人不可操作,直到加锁用户解锁,用commit或rollback解锁
行排他锁不阻止其他Session申请表共享锁和其他行的排他锁,但阻止申请表排他锁和锁定行的任何锁。
表排他锁阻止其他Session的申请的所有锁。
表共享锁不阻止其他Session申请行排他锁和表共享锁,但阻止申请表排他锁。
一道相关的试题:
User SCOTT executes the following command on the EMP table but has not issued COMMIT,ROLLBACK, or any data definition language (DDL)ommand:
SQL> SELECT job FROM emp WHERE job=’CLERK’ FOR UPDATE OF empno;
SCOTT has opened another session to work with the database. Which three operations would wait when issued in SCOTT’s second session?(Choose three.)
A. LOCK TABLE emp IN SHARE MODE;(阻止申请行的共享锁)
B. LOCK TABLE emp IN EXCLUSIVE MODE;(阻止申请表的排他锁)
C. DELETE FROM emp WHERE job=’MANAGER’;
D. INSERT INTO emp(empno,ename) VALUES(1289,’Dick’);
E. SELECT job FROM emp WHERE job=’CLERK’ FOR UPDATE OF empno;(阻止申请行的排他锁)
SELECT …… FROM …… FOR UPDATE 语句申请的是相应行的排他锁以及行所在表的共享锁。
上题答案给的是A、B、E
相关文章推荐
- 快速了解行锁、表锁、排他锁、共享锁
- 了解共享软件产品化一些基础的常识
- 了解NTFS和共享级别权限
- [数据库事务与锁]详解六: MySQL中的共享锁与排他锁
- 090820项目进展:了解内网p2p软件共享机制
- 企业级的文件共享你了解多少?
- 了解负载均衡 会话保持 session同步 session同步、共享的3种解决方法
- 详述 MySQL 中的共享锁和排他锁
- 全面了解局域网共享打印机故障全解析
- [转]MySQL中乐观锁、悲观锁(共享锁、排他锁)简介
- 聊聊高并发(十五)实现一个简单的读-写锁(共享-排他锁)
- 了解CORS(跨域资源共享)
- Oracle学习之共享锁和排他锁
- (转)共享锁,排他锁,更新锁。。。。
- 浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景
- [数据库事务与锁]详解六: MySQL中的共享锁与排他锁
- 共享锁与排他锁
- 共享锁与排他锁
- MySQL中的共享锁与排他锁
- 共享锁与排他锁理解