一、锁的概念

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

二、锁定的优点

  • 一致性 - 一次只允许一个用户修改数据
  • 完整性 - 为所有用户提供正确的数据。如果一个用户进行了修改并保存,所做的修改将反映给所有用户
  • 并行性 -允许多个用户访问同一数据

三、锁的类型

四、行级锁

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

  • 行级锁是一种排他锁,防止其他事务修改此行
  • 在使用以下语句时,Oracle会自动应用行级锁:
  1. INSERT
  2. UPDATE
  3. DELETE

SELECT … FOR UPDATESELECT … FOR UPDATE语句允许用户一次锁定多条记录进行更新使用COMMIT或ROLLBACK语句释放锁SELECT … FOR UPDATE语法:

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

例子:

SQL> SELECT * FROM emp WHERE sal=1000FOR UPDATE;
SQL> UPDATE emp SET sal = 3000WHERE  sal =1000;
SQL> COMMIT;
SQL> SELECT * FROM scott.emp WHERE sal=1000FOR UPDATE WAIT 5;
SQL> SELECT * FROM scott.emp WHERE sal=1000FOR UPDATE NOWAIT ;

五、表级锁

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

使用命令显示地锁定表,应用表级锁的语法是:
 LOCK TABLE table_name IN mode MODE;

  • 行共享 (ROW SHARE) – 禁止排他锁定表
  • 行排他(ROW EXCLUSIVE) – 禁止使用排他锁和共享锁
  • 共享锁(SHARE)
  1. 锁定表,仅允许其他用户查询表中的行
  2. 禁止其他用户插入、更新和删除行
  3. 多个用户可以同时在同一个表上应用此锁
  • 共享行排他(SHARE ROW EXCLUSIVE) – 比共享锁更多的限制,禁止使用共享锁及更高的锁
  • 排他(EXCLUSIVE) – 限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表

六、死锁

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

Oracle入门(十五)之数据库锁相关推荐

  1. oracle degree 造成阻塞_数据库锁/阻塞分析的一种常用方法

    对于一些中小用户来说,日常遇到的最多的问题不外乎表空间与锁的分析.数据库表空间使用率/空间使用率分析似乎很简单,是一条SQL就能搞定的事情,实际上并不简单,这个话题容以后找时间阐述.今天就重点分析下另 ...

  2. Oracle入门(五)之基本命令操作

    一.show (1)查询Oracle系统变量值 语法:show   变量名 show all --查看所有68个系统变量值 show user --显示当前连接用户 注:Oracle的68个系统变量的 ...

  3. Oracle入门(五F)之11g show spparameter 命令的使用

    转载自 oracle 11g show spparameter 命令的使用 当我们要获取oracle数据库当前的参数值时,可以通过查询v$parameter动态性能视图得到,当然了也可以使用show ...

  4. Oracle入门(五A)之conn命令

    一.connect命令 将给定的用户名连接到Oracle数据库.当你运行一个连接命令.站点配置文件.Galgn.SQL和用户配置文件,按顺序处理Login .SQL.连接不重发如果初始连接不成功,请使 ...

  5. Oracle入门(五B)之desc命令

    翻译自   DESCRIBE describe命令 列出指定表的列定义,视图或同义词,或指定函数或存储过程的详述. 语法:desc[ribe]   {[模式.]对象[@链接串]} 模式 表示对象驻留的 ...

  6. iOS学习笔记(十五)——数据库操作(SQLite)

    SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的 ...

  7. java基础第二十五天 数据库

    1. mysql数据库基本操作 1.1 mysql.mysqladmin和mysqldump 1.1.1. mysql命令 mysql指令连接数据库连接数据库 mysql -h host_name - ...

  8. Oracle入门(五D)之如何设置show parameter显示隐含参数

    转载自 oracle如何设置show parameter显示隐含参数 在sqlplus中show parameter是显示不了隐藏参数的,需要做一个处理,如下所示:    以SYS用户登录: C:\D ...

  9. Oracle入门(五E)之讲解show parameter命令模糊查询

    转载自 讲解Oracle show parameter命令的小技巧 Oracle参数查询命令show parameter的一个小技巧,可以使用模糊查询,比如我想查询包含db_的参数,那么我就可以用: ...

  10. Oracle入门(五C)之68个系统变量的key和默认value

    Oracle的68个系统变量的key和默认value appinfo 为 OFF 并且已设置为 "SQL*Plus" arraysize 15 autocommit OFF aut ...

最新文章

  1. pandas使用replace函数将dataframe指定数据列中的特定字符串进行自定义替换(replace substring in dataframe column values)
  2. 简单的docker-compose编写介绍(包含 nginx+tomcat 实例演示)
  3. url(r'^index/$',views.index)的含义解释
  4. 更改应用程序图标_在 Windows 10 version 1903 中查看应用程序是否支持 DPI 感知
  5. 经典面试题(50):以下代码将输出的结果是什么?
  6. kafka是什么_Kafka的Controller Broker是什么
  7. java 1.8.0 安全_RedHat安全更新修复OpenJDK1.8.0版本漏洞
  8. NumPy Essentials 带注释源码 二、NumPy 数组对象
  9. Linux查看进程是否占用,Linux 下查看哪个进程占用swap空间
  10. hashmap扩容_原创 | 我说我了解集合类,面试官竟然问我为啥HashMap的负载因子不设置成1!?
  11. 谈谈Linux下动态库查找路径的问题
  12. php加入到jpg,PHP如何将PNG转换成JPG?
  13. Moore-Penrose伪逆(Moore-Penrose广义逆)
  14. kinect游戏linux,两台kinect同时运行
  15. chemdraw如何改中文_教你如何快速自定义ChemDraw默认设置
  16. python 制作工资条
  17. Linux使用ping命令扫描整个网段
  18. 帆软填报-根据角色/权限设置校验规则(含开关配置表校验)
  19. 【计算机视觉】全景相机标定(MATLAB/opencv)
  20. redis集群模式详解

热门文章

  1. 「3.4w字」超保姆级教程带你实现Promise的核心功能
  2. [C++STL]C++实现queue容器适配器
  3. python3 beautifulsoup 表格,使用Python中的BeautifulSoup拉取特定的表数据
  4. 浅谈java spring_浅谈Spring(一)
  5. pycharm里面下载pip(不用去官网)
  6. matlab中scrsz的意思,matlab图片c存储方法
  7. Web Service简介
  8. Legacy(线段树优化建边跑Dijkstra)
  9. Codeforces Round #636 (Div. 3) E. Weights Distributing 思维 + bfs
  10. P4847 银河英雄传说V2 非旋treap