Oracle原理: 行级锁和表级锁
行级锁就是施放在行上的排他锁,表级锁就是会施放在表上的排他锁。锁分为两大类:共享锁和排它锁。共享锁的意思就是可以其他用户来锁定表,而排它锁不准其他用户来锁定表。
锁具有:一致性(只允许一个用户修改数据)、完整性(为所有用户提供完整的数据,即要么取的都是修改前的数据,要么都是修改后的数据),并行性(允许多个用户访问同一数据)
1.行级锁
在使用insert,update,delete,select...for update 这4种语法时,Oracle会自动的应用行级锁,直到用户commit;或者Rollback才会施放锁。为了保证一致性,在增删改操作时自然要先锁定要修改的数据,不让其他用户再操作,直到施放锁。在commit之前用户查询到的数据都是还没修改的,commit以后查询出来的数据才是修改后的。
drop table salary_tbl;
create table salary_tbl(employer_nm varchar(20),department varchar(20) not null,salary number not null,leader_nm varchar(20)
);
truncate table salary_tbl;
beginfor i in 1..100loopinsert into salary_tbl values('雇佣者'||i,'部门'||Mod(i,6),100*POWER(10000,i*0.01),'雇佣者'||Mod(i,6)); end loop;
end;
/
commit;
用上述语法在普通用户voapd上创建薪资表和添加数据,用两个sqlplus窗口进行测试:
可以发现右边的命令窗口在正在等待,因为左边窗口的select...for update 把数据行给锁上了。此时可以用sql查询锁的信息:select * from v$lock where TYPE in('TM','TX')
其中 TM 指的是表级锁,TX指的是行级锁,查询结果如下图(SID指用户ID)。
此时左边的命令窗commit,或者rollback 施放了锁之后,右边的才能够执行update语句,此时才轮到右边的给行数据加锁.。此时的锁是行级锁。其他用户可以对表的其他数据进行增删改操作。
2,表级锁
LOCK TABLE [tablename] IN [row share/SHARE/EXCLUSIVE...] MODE;
(1)行共享 (ROW SHARE) – 禁止排他锁定表。禁止EXCLUSIVE再锁上同一张表,不禁止用户增删改表记录
(2)行排他(ROW EXCLUSIVE) – 禁止使用排他锁和共享锁,禁止同时使用EXCLUSIVE,SHARE ROW EXCLUSIVE锁。不禁止用户增删改表记录
(3)共享锁(SHARE)
锁定表,仅允许其他用户查询表中的行
禁止其他用户插入、更新和删除行
多个用户可以同时在同一个表上应用此锁
(4)共享行排他(SHARE ROW EXCLUSIVE) – 比共享锁更多的限制,禁止使用共享锁及更高的锁
(5)排他(EXCLUSIVE) – 限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表
解锁表:用如下sql查询出sid,serial
select b.owner,b.object_name,a.session_id,a.locked_mode,c.serial#,c.sid||','||c.serial#
from v$locked_object a,dba_objects b ,v$session c
where b.object_id = a.object_id
And a.session_id = c.sid
然后 ALTER SYSTEM KILL SESSION
'69,32'
IMMEDIATE; 解除表锁定。
当出现死锁时,Oracle会通过结束其中一个事物来解除死锁。
Oracle原理: 行级锁和表级锁相关推荐
- 详解各种锁:CAS、共享锁、排它锁、互斥锁、悲观锁、乐观锁、行级锁、表级锁、页级锁、死锁、JAVA对CAS的支持、ABA问题、AQS原理
共享锁(S锁) 又称为读锁,可以查看但无法修改和删除的一种数据锁.如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排它锁.获准共享锁的事务只能读数据,不能修改数据. 共享锁下其它用 ...
- MySQL中的行级锁,表级锁,页级锁
数据库锁是数据库系统中非常重要的一个概念,本文将深入分析数据库中的锁相关知识,您可点击下方音频收听或直接查看文稿中的文字. 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并 ...
- mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍
页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...
- mysql数据库的行级锁有几种_MySQL中的行级锁、表级锁、页级锁
在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎).表级锁(MYISAM ...
- Mysql中的行级锁、表级锁、页级锁
转载自 Mysql中的行级锁.表级锁.页级锁 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在数据库的锁机制中介绍过,在DBMS中,可以按 ...
- mysql 表级锁_MySQL行级锁和表级锁
锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...
- mysql表级锁和行级锁_MySQL表级锁和行级锁
一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...
- MySQL行级锁和表级锁
锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...
- mysql是表级锁还是行级锁_带你了解MySQL数据库中的全局锁、表级锁、行级锁
在 MySQL 数据库中,有很多各种各样的锁,这些锁大致可以分为三类:全局锁.表级锁.行级锁.这篇文章小编就带你简单了解一下这三种锁. 1. 全局锁 全局锁是粒度比较大的锁,基本上也使用不上,就像我们 ...
最新文章
- wmp流代理服务器设置为空,wmp服务器运行失败
- InfoQ播客: Shuman Ghosemajumder谈安全和网络犯罪
- 微型计算机硬件中访问速度最快的,习题一计算机基础知识.doc.doc
- optee内存管理和页表建立
- 科大星云诗社动态20210824
- python什么时候用eval_Python:eval的妙用和滥用
- codeforce 457DIV2 C题
- 关于ASP.NET给产品分类,分页,详情页生成静态页面
- linux 模拟打电话,Android 调用打电话和发短信功能
- Linux CentOS 6.5 操作环境下修改mysql数据库密码
- ORACLE创建表空间、用户语句
- Java:JavaSocket编程开发多人聊天室
- java生成zipf分布_数据存储中Zipf分布
- 《ERP原理》期末复习——第四章 基础数据
- 初试 Coding.net 在线IDE——WebIDE
- 微软服务器2016各版本区别,Win10系统有几个版本?Windows10各版本区别详细介绍
- P32-前端基础-CSS盒子尺寸box-sizing: border-box
- 比excel好用,还能解决数据孤岛问题,这款报表工具千万别错过
- eDP接口信号组成认识
- Sublime Text 3 汉化的简单方法
热门文章
- next.js 简单使用
- Web前端面试指导(十八):用纯CSS创建一个三角形的原理是什么?
- Appboy 基于 MongoDB 的数据密集型实践
- [转]自适应网页设计(Responsive Web Design)
- Androidpn 消息推送总结
- 前端月趋势榜:9 月最新上榜的、热门的 10 个前端开源项目 - 2109
- reactjs antd(ant-design)安装、基本使用及css样式的按需引入
- go gin框架:Any响应任何请求类型
- 【收藏】详解apt、yum、dnf 和 pkg
- Spark SQL JOIN操作代码示例