热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

ORACLE锁机制

ORACLE锁机制中有两种锁分为:排他锁、共享锁排他锁:又称X锁,当用户操纵一条数据时,oracle会自动隐式的未该用户操纵的这条记录加上排他锁。加上排他锁后其他事务是不能对该条数据操纵的,只能查看,其他事务也不能再继加X锁。当本事务结束后,其他事务才

ORACLE锁机制中有两种锁分为:排他锁、共享锁 排他锁:又称X锁,当用户操纵一条数据时,oracle会自动隐式的未该用户操纵的这条记录加上排他锁。加上排他锁后其他事务是不能对该条数据操纵的,只能查看,其他事务也不能再继加X锁。当本事务结束后,其他事务才

ORACLE锁机制中有两种锁分为:排他锁、共享锁

排他锁:又称X锁,当用户操纵一条数据时,oracle会自动隐式的未该用户操纵的这条记录加上排他锁。加上排他锁后其他事务是不能对该条数据操纵的,只能查看,其他事务也不能再继加X锁。当本事务结束后,其他事务才可加X锁操纵这条数据。

共享锁:又称S锁,加锁的用户只要查看权限,而不能增删改。其他用户也可对该数据加S锁,也只能有查看权限不能增删改。


ORACLE中加锁对象的不同,也可分为三种类型的锁。

1、DML锁

DML锁是最常用的锁,为保护表对象数据的一致完整性。该锁再可细分为

行级锁:简单说锁定表的数据行;也称排他锁又称TX锁。当对某些数据行使用DML语句时,oracle自动对该数据行添加行级锁,其他事务只能等到事务提交或释放后才能执行这些数据的DML操作;行级锁不是单独的锁,系统添加行级锁时,oracle也会自动加上该数据对应的表级锁,是为防止其他用户使用DDL语句修改表结构等从而破坏行级锁的约束

表级锁:简单说锁定整个对象表;也称表锁又称TM锁。表级锁可分为5种:

1).行共享

2).行排他

3).共享

4).共享排他

5).排他

2、DDL锁


3、系统锁:系统内部锁,用户无法调用查看的到,不需要了解。

手动加锁

一般情况下,ORACLE执行DML语句,一般时不需要手动加锁的,它会自动加锁。也可以手动的方式去添加锁,手动添加方式为:

1).SELECT 语句 FOR UPDATE [of columns] [wait n | nowait] [skip locked]; --对行记录加锁

2).LOCK TABLE tableName IN lockemode MODE NOWAIT --对表加锁

加锁语句练习:

1).使用SELECT 语句 FOR UPDATE语句加锁:

会话1:增加一条记录,不提交事务

SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
4 1111

SQL> update classes set cname='0000' where cid=4;
1 row updated

--在会话1中插入了一条记录但不提交,这时会话1同时拥有TX(行级锁),TM(表级锁)

会话2:使用SELECT * FOR UPDATE 语句加行级锁

SQL> select * from classes for update nowait;
select * from classes for update nowait
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源

--会话2对表里面行数据添加行级锁失败,因为会话1中还在占用该锁。 如不指定nowait | wait 关键字,会一直处于等待阶段,直到锁被释放才可获取到锁。

SQL> select * from classes for update;
SQL> --等待中....


2).使用LOCK TABLE 语句加锁

会话1:在会话1中修改一条记录,但不提交。

SQL> select * from classes;
CID CNAME
--------------------------------------- ----------
1 0901
2 0902
3 0903
4 0000

SQL> update classes set cname='1111' where cid=4;
1 row updated

--这时会话1中拥有TM,TX锁。


会话2:会话2表中添加行拍他锁

SQL> lock table classes in row exclusive mode nowait;
Table(s) locked

--添加表级锁成功。

推荐阅读
  • 本视频教程将带你快速了解 Android 开发的基础知识,并详细讲解如何在 Android 应用中使用 SQLite 数据库进行数据存储和管理。 ... [详细]
  • 如何撰写数据分析师(包括转行者)的面试简历?
    CDA数据分析师团队出品,作者:徐杨老师,编辑:Mika。本文将帮助您了解如何撰写一份高质量的数据分析师简历,特别是对于转行者。 ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • C盘无法格式化的原因及解决方法
    本文探讨了C盘无法格式化的原因,并提供了详细的解决方案,帮助用户顺利进行系统维护。 ... [详细]
  • 本文详细介绍了数据库并发控制的基本概念、重要性和具体实现方法。并发控制是确保多个事务在同时操作数据库时保持数据一致性的关键机制。文章涵盖了锁机制、多版本并发控制(MVCC)、乐观并发控制和悲观并发控制等内容。 ... [详细]
  • 使用虚拟机配置服务器
    本文详细介绍了如何使用虚拟机配置服务器,包括购买云服务器的操作步骤、系统默认配置以及相关注意事项。通过这些步骤,您可以高效地配置和管理您的服务器。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文讨论了在进行 MySQL 数据迁移过程中遇到的所有 .frm 文件报错的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 本文介绍了如何通过Sybase Central连接到示例数据库,并查看其中的表和其他对象。主要内容包括启动Sybase Central、建立连接、查看表列表及表的具体信息。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 通过使用Sqoop导入工具,可以精确控制并高效地将表数据的特定子集导入到HDFS中。具体而言,可以通过在导入命令中添加WHERE子句来指定所需的数据范围,从而在数据库服务器上执行相应的SQL查询,并将查询结果高效地存储到HDFS中。这种方法不仅提高了数据导入的灵活性,还确保了数据的准确性和完整性。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • C# 中 SQLite 报错:在 "\\s\\" 附近出现语法错误,如何解决? ... [详细]
author-avatar
张洪幸_246
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有