行级锁就是施放在行上的排他锁,表级锁就是会施放在表上的排他锁。锁分为两大类:共享锁和排它锁。共享锁的意思就是可以其他用户来锁定表,而排它锁不准其他用户来锁定表。

锁具有:一致性(只允许一个用户修改数据)、完整性(为所有用户提供完整的数据,即要么取的都是修改前的数据,要么都是修改后的数据),并行性(允许多个用户访问同一数据)

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原理: 行级锁和表级锁相关推荐

  1. 详解各种锁:CAS、共享锁、排它锁、互斥锁、悲观锁、乐观锁、行级锁、表级锁、页级锁、死锁、JAVA对CAS的支持、ABA问题、AQS原理

    共享锁(S锁) 又称为读锁,可以查看但无法修改和删除的一种数据锁.如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排它锁.获准共享锁的事务只能读数据,不能修改数据. 共享锁下其它用 ...

  2. MySQL中的行级锁,表级锁,页级锁

    数据库锁是数据库系统中非常重要的一个概念,本文将深入分析数据库中的锁相关知识,您可点击下方音频收听或直接查看文稿中的文字. 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并 ...

  3. mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍

    页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...

  4. mysql数据库的行级锁有几种_MySQL中的行级锁、表级锁、页级锁

    在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎).表级锁(MYISAM ...

  5. Mysql中的行级锁、表级锁、页级锁

    转载自 Mysql中的行级锁.表级锁.页级锁 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在数据库的锁机制中介绍过,在DBMS中,可以按 ...

  6. mysql 表级锁_MySQL行级锁和表级锁

    锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...

  7. mysql表级锁和行级锁_MySQL表级锁和行级锁

    一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

  8. MySQL行级锁和表级锁

    锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...

  9. mysql是表级锁还是行级锁_带你了解MySQL数据库中的全局锁、表级锁、行级锁

    在 MySQL 数据库中,有很多各种各样的锁,这些锁大致可以分为三类:全局锁.表级锁.行级锁.这篇文章小编就带你简单了解一下这三种锁. 1. 全局锁 全局锁是粒度比较大的锁,基本上也使用不上,就像我们 ...

最新文章

  1. wmp流代理服务器设置为空,wmp服务器运行失败
  2. InfoQ播客: Shuman Ghosemajumder谈安全和网络犯罪
  3. 微型计算机硬件中访问速度最快的,习题一计算机基础知识.doc.doc
  4. optee内存管理和页表建立
  5. 科大星云诗社动态20210824
  6. python什么时候用eval_Python:eval的妙用和滥用
  7. codeforce 457DIV2 C题
  8. 关于ASP.NET给产品分类,分页,详情页生成静态页面
  9. linux 模拟打电话,Android 调用打电话和发短信功能
  10. Linux CentOS 6.5 操作环境下修改mysql数据库密码
  11. ORACLE创建表空间、用户语句
  12. Java:JavaSocket编程开发多人聊天室
  13. java生成zipf分布_数据存储中Zipf分布
  14. 《ERP原理》期末复习——第四章 基础数据
  15. 初试 Coding.net 在线IDE——WebIDE
  16. 微软服务器2016各版本区别,Win10系统有几个版本?Windows10各版本区别详细介绍
  17. P32-前端基础-CSS盒子尺寸box-sizing: border-box
  18. 比excel好用,还能解决数据孤岛问题,这款报表工具千万别错过
  19. eDP接口信号组成认识
  20. Sublime Text 3 汉化的简单方法

热门文章

  1. next.js 简单使用
  2. Web前端面试指导(十八):用纯CSS创建一个三角形的原理是什么?
  3. Appboy 基于 MongoDB 的数据密集型实践
  4. [转]自适应网页设计(Responsive Web Design)
  5. Androidpn 消息推送总结
  6. 前端月趋势榜:9 月最新上榜的、热门的 10 个前端开源项目 - 2109
  7. reactjs antd(ant-design)安装、基本使用及css样式的按需引入
  8. go gin框架:Any响应任何请求类型
  9. 【收藏】详解apt、yum、dnf 和 pkg
  10. Spark SQL JOIN操作代码示例