共享锁和排它锁
2016-07-13 10:23
183 查看
主要讨论共享锁和排它锁两个比较常见简单的锁
共享锁:如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
排他锁:如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
1、执行SELECT语句时可以获得共享锁。Oracle通过锁定指定表来确保没有人能够在你使用表数据时修改该表的结构,但是,被查询的记录并没有进行锁定。共享锁无法阻止其他用户读取和修改表中的数据,只能阻止其他用户使用ALTER TABLE命令改变指定表的结构或用DROP TABLE命令删除指定表。多个用户可以同时获得相同数据上的共享锁。
2、执行DML语句时可以获得排他锁,并且正在被修改的所有记录都会获得排他锁。在你启动的事务内,排他锁阻止其他用户获得正在处理的数据上的排他锁,直至执行COMMIT或ROLLBACK语句。这样,两个用户就无法同时更新相同的数据。某个用户试图更新被另一个用户锁定的数据时,第一个用户必须等待至去除排他锁后才能进行操作。
注:SELECT语句对正在查询的数据不进行锁定。
共享锁:如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
排他锁:如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
1、执行SELECT语句时可以获得共享锁。Oracle通过锁定指定表来确保没有人能够在你使用表数据时修改该表的结构,但是,被查询的记录并没有进行锁定。共享锁无法阻止其他用户读取和修改表中的数据,只能阻止其他用户使用ALTER TABLE命令改变指定表的结构或用DROP TABLE命令删除指定表。多个用户可以同时获得相同数据上的共享锁。
2、执行DML语句时可以获得排他锁,并且正在被修改的所有记录都会获得排他锁。在你启动的事务内,排他锁阻止其他用户获得正在处理的数据上的排他锁,直至执行COMMIT或ROLLBACK语句。这样,两个用户就无法同时更新相同的数据。某个用户试图更新被另一个用户锁定的数据时,第一个用户必须等待至去除排他锁后才能进行操作。
注:SELECT语句对正在查询的数据不进行锁定。
相关文章推荐
- spark新能优化之序列化
- 用tornado实现一个简单的websocket样例
- MVC 之 EF框架简介
- 面试经验
- 网络知识
- 在 Linux 下使用任务管理器
- Static关键字所有用法详解
- SSH问题总结(1)_Spring注入问题
- 2014 鞍山区域赛 C HDU5072 Coprime 莫比乌斯/容斥+同色三角形
- 【Unity3D自学记录】鼠标拖拽物体移动
- 如何设置感兴趣的区域ROI
- 脱壳基础
- Druid连接池在spring中的配置
- c/c++ 动态内存配置的使用原则
- iOS推送通知的证书设置
- win 安装plsql的步骤
- OC 成员变量和属性的区别
- MarkdownPad2.5 注册码
- One Step By One Step 解析OkHttp3 - Dispatcher (一)
- hibbernate的主键