文档章节

Oracle学习笔记七 锁

javayou
 javayou
发布于 2016/05/24 14:03
字数 766
阅读 12
收藏 0

锁的概念

  • 锁是数据库用来控制共享资源并发访问的机制。
  • 锁用于保护正在被修改的数据
  • 直到提交或回滚了事务之后,其他用户才可以更新数据
  • 对数据的并发控制,保证一致性、完整性。

            

 

并行性 -允许多个用户访问同一数据

一致性 - 一次只允许一个用户修改数据

完整性 - 为所有用户提供正确的数据。如果一个用户进行了修改并保存,所做的修改将反映给所有用户

 

锁的类型

 

行级锁:对操作的数据行进行锁定,防止其他用户(连接)进行修改。

表级锁:对整个表进行锁定。

 

行级锁

对正在被修改的行进行锁定。其他用户可以访问除被锁定的行以外的行。

 

 

行级锁是一种排他锁,防止其他事务修改此行。

在使用以下语句时,Oracle会自动应用行级锁:

  1.INSERT

  2.UPDATE

  3.DELETE

  4.SELECT … FOR UPDATE

SELECT … FOR UPDATE语句允许用户一次锁定多条记录进行更新,锁定的数据自能通过commit或者rollback进行提交或回滚后解锁

 

SELECT … FOR UPDATE语法:

 SELECT … FOR UPDATE [OF columns]
[WAIT n | NOWAIT];

SELECT * FROM order_master WHERE vencode='V002'
           FOR UPDATE OF odate, del_date;
UPDATE order_master SET del_date='28-8月-05'
           WHERE vencode=’V002’;
COMMIT;

 

 

SELECT * FROM order_master WHERE vencode='V002' FOR UPDATE WAIT 5;

 

 

SELECT * FROM order_master WHERE vencode='V002' FOR UPDATE NOWAIT;

 

 

表级锁

表级锁锁定整个表,限制其他用户对表的访问。

 

 

使用表级锁使用命令显示地锁定表,应用表级锁的语法是:

 LOCK TABLE table_name IN mode MODE;

 

 

 

  • 行共享:row share,禁止排他锁(不允许排他锁再锁定),允许其他的用户锁定表数据行共享使用。

 

Lock table emp in row share mode;

 

 

  • 行排他:exclusive 禁止使用排他锁和共享锁
Lock table emp in row exclusive mode;

 

  • 共享锁:share,可以多个用户同时锁定一个表,但是只允许用户查询和不能修改数据

 

    • 1.锁定表,仅允许其他用户查询表中的行
    • 2.禁止其他用户插入、更新和删除行
    • 3.多个用户可以同时在同一个表上应用此锁

       

  • 共享行排他:share row exclusive 比共享锁更多的限制,禁止使用共享锁及更高的锁
  • 排他锁: exclusive,禁止其他的用户再锁定 限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表

死锁

当两个事务相互等待对方释放资源时,就会形成死锁,Oracle会自动检测死锁,并通过结束其中的一个事务来解决死锁

例:

复制代码

--第一步:用户1
update emp2 set sal=sal+25 where empno=7782;
--第二步:用户2
update emp2 set sal=sal+25 where empno=7566;
--第三步:用户1
update emp2 set sal=sal+25 where empno=7566;
--第四步:用户2
update emp2 set sal=sal+25 where empno=7782;
--产生死锁!!Oracle 自动解锁!

复制代码

本文转载自:http://www.cnblogs.com/hopeblog/p/5003115.html

共有 人打赏支持
javayou
粉丝 3
博文 52
码字总数 688
作品 0
太原
私信 提问
Oracle笔记 目录索引

Oracle笔记 一、oracle的安装、sqlplus的使用 Oracle笔记 二、常用dba命令行 Oracle笔记 三、function 、selectOracle笔记 四、增删改、事务 Oracle笔记 五、创建表、约束、视图、索引、序列...

ibm_hoojo
2011/05/03
0
0
系统的撸一遍MySQL - MySQL读书笔记

作为一个工作6年的PHP工程师,说实话从来没有系统的去看过一本MySQL的书,哪怕入门的书,表示真的很汗颜。。。 记得最早学数据库的时候学过sql server、oracle 但是最终没有搞Java、也没有搞...

logbird
2016/08/20
64
3
一年走向【Java架构师】之葵花宝典

大多数时候,不是我们不努力,而是不知从何下手,我深知一份好的学习资料是多么的重要,我们通常会把大量的时间都浪费在找资源上,本人搜集学习java架构师的经典学习路线如下可供参考!!! 一...

我一路狂奔
2017/05/20
395
1
多线程学习笔记(七)

在使用synchronized时,当一个线程得到一个对象锁后,再次请求此对象锁时是可以再次得到该对象锁的.这也证明在一个synchronized方法/块的内部调用本类的其他synchronized方法/块时,是永远可以得...

scymore
2016/09/07
18
0
读书笔记之《Java并发编程的艺术》-线程池和Executor的子孙们

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 教程:在 Confluence 中导航

当你对 Confluence 有所了解后,你会发现 Confluence 使用起来非常简单。这个教程主要是针对你使用的 Confluence 界面进行一些说明,同时向你展示在那里可以进行一些通用的任务和操作。 空间...

honeymose
今天
2
0
sed, awk 练习

1. sed打印某行到某行之间的内容 2. sed 转换大小写 将单词首字母转化大写 将所有小写转化大写 3. sed 在某一行最后面添加一个数字 4. 删除某行到最后一行 解析: {:a;N;$!ba;d} :a : 是...

Fc丶
今天
2
0
babel6升级到7,jest-babel报错:Requires Babel "^7.0.0-0", but was loaded with "6.26.3".

自从将前端环境更新到babel7,jest-babel之前是基于babel6的,执行时候就会报:Requires Babel "^7.0.0-0", but was loaded with "6.26.3". 很烦,因为连续帮好几台电脑修复这个问题,所以记...

曾建凯
今天
1
0
探索802.11ax

802.11ax承诺在真实条件下改善峰值性能和最差情况。 如何改善今天的Wi-Fi? 在决定如何改进当前版本以外的Wi-Fi时,802.11ac,IEEE和Wi-Fi联盟调查了Wi-Fi部署和行为,以确定更广泛使用的障碍...

linuxprobe16
今天
2
0
使用linux将64G的SDCARD格式化为FAT32

一、命令如下: sudo fdisk -lsudo mkfs.vfat /dev/sda -Isudo fdisk /dev/sda Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to wri......

mbzhong
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部