网站首页 > 技术文章 正文
3.锁
在事务并发时已经提到了锁的概念,锁是为了保证数据的并发性、完整性和一致性而引入的一种机制。前面事务中已经认识了共享锁和排他锁是按照并发事务对资源访问级别划分的。按照锁定的不同对象划分,又分为行级锁和表级锁。
> 行级锁:只对用户正在访问的行进行锁定。
> 表级锁:对整个表进行锁定。
Oracle 中实现加锁机制主要有两种方式: 自动加锁和人工加锁。
自动加锁:
在一般情况下,oracle 会根据要求获得资源的同时,自动的使用不同类型的锁来控制数据的并行存取,以防止用户之间的破坏性干扰。默认情况下,更新数据时 oracle会自动提供排他锁,使不同用户更新表中同一记录时不会发生冲突。
用户在执行INSERT、UPDATE、DELETE、DCL 语句、DDLig句时,Oracle 系统会自动加锁。在一个事务中,系统会自动锁定某一个数据库对象,只有该事务提交或者回滚后,系统释放资源,其他用户才能使用该资源。
例如: 不同用户对EMP 表进行更新操作,第一个用户update 后,第二个用户也进行更新操作,在第一个用户没有提文或者回滚事务时,第二个用户的操作将一直无法正常运行。
征服平凡、挑战自我,我们期待你的加入!兆隆IT云学院,0学费,0基础,等你来!
使用:SELECT …FOR UPDATE OF 列 [WAIT n 丨NOWAIT] 查询时也可以自动锁定查询的行。只是更新时如果行中有锁。那么就会等待,可以使用WAIT或NOWAIT 选择等待的时间或者不等待。
比如;在emp 表中正在修改的情况下运行下面语句。查询时如果资源被锁定,那么等待3 秒钟之后,资源仍然被锁定则自动放弃该操作。
代码演示:SELECT…FOR UPDATE
SQL> SELECT * FROM EMP FOR UPDATE WAIT 3;
SELECT * FROM EMP FOR UPDATE WAIT 3
ORA-30006:资源已被占用;执行操作时出现WAIT 超时
当事务获得行级锁后,此事务也将自动获得表级共享锁,这时其他用户不能执行DML语句对该表进行操作,只能查询表中的数据。
人工加锁
除了系统自动加锁外,在数据库的管理中,也可以人工强制对表加锁。使用命令是:
LOCK TABLE 表名IN 锁类型 MODE[NOWAIT]
NOWAIT 为了防止无限等待其他用户释放锁。
主动如锁的锁类型有: 行共享锁(ROW SHARE),行排他锁(ROW EXCLUSIVE),共享更新(SHARE UPDATE), 共享锁 (SHARE),共享排他锁 (SHARE EXCLUSIVE), 排他锁 (EXCLUSIVE)。
代码演示:手工加锁:排他锁定EMP 表
SQL> LOCK TABLE EMP IN EXCLUSIVE MODE NOWAIT;
Table(s) lorked
提示:在Oracle实际开发中,一般不需要对Oracle的进行特殊处理,都是系统自动完成的。手工加锁一般都是数据管理库管理员为了数据库管理而加的锁。
征服平凡、挑战自我,我们期待你的加入!分享来自兆隆IT云学院,QQ:598756835
猜你喜欢
- 2025-09-08 SQL 中 For update 讲解_for循环语句结构
- 2025-09-08 Dify新版1.8.0发布:新增异步工作流和多模型设置!
- 2025-09-08 无锁队列Disruptor原理解析_ringbuffer 无锁队列 c
- 2025-09-08 Spring Boot + 悲观锁_悲观锁使用场景
- 2024-11-14 深入浅出MySQL之MySQL锁概述 mysql锁的实现原理
- 2024-11-14 面试必问的Mysql事务和锁,你真的了解吗?
- 2024-11-14 数据库常用的锁有哪些? 数据库锁种类
- 2024-11-14 MySQL事务和锁的使用 mysql事务锁机制
- 2024-11-14 数据库融入DevOps基因后,运维再也不用做背锅侠了
- 2024-11-14 Mysql锁-01锁相关的一些概念 mysql锁的实现原理
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)