1、DML锁包括行级锁(TX)和表级锁(TM)
2、行级锁不是单独存在的,当事务获得了某些数据行上的行级锁时,此事务同时获得了数据行所属表上的表级锁,因为表级锁能够防止系统中并发地执行有冲突的 DDL 操作,避免当前事务中的数据操作被并发地DDL 操作影响。
3、表级锁分为5种,限制程度升序排列:
(1)行共享(row share):与行排他类似,区别是别的事务还可以在此表上加任何排他锁。(除排他(exclusive)外)
(2)行排他(row exclusive):其他事务依然可以并发地对相同数据表执行查询,插入,更新,删除操作,或对表内数据行加锁的操作,但不能有其他的排他锁(自身是可以的,没发现有什么用)
(3)共享(share):在表没有被任何DML操作时,多个事务都可加锁,但只有在仅一个事务加锁的情况下只有此事务才能对表更新;当表已经被更新或者指定要更新时(select for update),任何事务都不能加此锁了。
(4)共享行排他(share row exclusive):在表没有被任何DML操作时,只有一个事务可以加锁,可以更新,书上说别的事务可以使用select for update锁定选中的数据行,可是实验后没被验证。
(5)排他(exclusive):在表没有被任何DML操作时,只有一个事务可以加锁,可以更新,与共享行排他的区别还没有发现
|
|
否允许锁操作? |
SQL 语句 |
表级锁模式 |
RS |
RX |
S |
SRX |
X |
|
SELECT...FROM table... |
无 |
Y |
Y |
Y |
Y |
Y |
INSERT INTO table ... |
RX |
Y |
Y |
N |
N |
N |
UPDATE table ... |
RX |
Y* |
Y* |
N |
N |
N |
DELETE FROM table ... |
RX |
Y* |
Y* |
N |
N |
N |
SELECT ... FROM table FOR UPDATE OF ... |
RS |
Y* |
Y* |
Y* |
Y* |
N |
LOCK TABLE table IN ROW SHARE MODE |
RS |
Y |
Y |
Y |
Y |
N |
LOCK TABLE table IN ROW EXCLUSIVE MODE |
RX |
Y |
Y |
N |
N |
N |
LOCK TABLE table IN SHARE MODE |
S |
Y |
N |
Y |
N |
N |
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE |
SRX |
Y |
N |
N |
N |
N |
LOCK TABLE table IN EXCLUSIVE MODE |
X |
N |
N |
N |
N |
N |
|
DML 语句
|
是否存在 行级锁 |
表级锁的 模式 |
|
SELECT ... FROM table |
|
|
INSERT INTO table ... |
X |
RX |
UPDATE table ... |
X |
RX |
DELETE FROM table ... |
X |
RX |
SELECT ... FROM table ... FOR UPDATE OF ... |
X |
RS |
LOCK TABLE table IN ... |
|
|
ROW SHARE MODE |
|
RS |
ROW EXCLUSIVE MODE |
|
RX |
SHARE MODE |
|
S |
SHARE EXCLUSIVE MODE |
|
SRX |
EXCLUSIVE MODE |
|
X |
遗留问题:SELECT FOR UPDATE属不属于DML
分享到:
相关推荐
在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。 一、行级锁 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少...
值得学习的MySQL行级锁、表级锁、页级锁详细介绍
行级锁的实例
主要介绍了MySQL行级锁、表级锁、页级锁详细介绍,同时列举了一些实例说明,需要的朋友可以参考下
1、如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可 2、在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁 3、对于非常容易产生死锁的业
各种锁汇总,乐观锁、悲观锁、分布式锁、可重入锁、互斥锁、读写锁、分段锁、类锁、行级锁等
下面重点介绍Oracle行级锁,Oracle行级锁只对用户正在访问的行进行锁定。可以更好的保证数据的安全性。 如果该用户正在修改某行,那么其他用户就可以更新同一表中该行之外的数据。 Oracle行级锁是一种排他锁,防止...
锁是在执行多线程时用于强行限定资源访问的同步机制,数据库锁根据锁的粒度可分为行级锁,表级锁和页级锁 行级锁 行级锁是mysql中粒度最细的一种锁机制,表示只对当前所操作的行进行加锁,行级锁发生冲突的概率很...
InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。 MySQL这3种锁的特性可大致归纳如下。 开销、加锁速度、死锁、粒度、并发性能 l 表级锁:开销小,加锁快;...
表级锁(TM锁) 锁定相关视图 v$transaction v$lock 5 v$enqueue_lock v$session 检测并解决冲突 常见的锁查询和处理 当前系统中存在的锁争用: 引发争用的session信息: 引发争用的sql语句: 引发争用的数据对象 ...
房间级制冷系统无法满足新一代数据中心的冷却需求。最新一代的高负载密度和可变负载密度IT设备所产生的...本文将对比房间级、行级和机柜级制冷架构,并说明为何行级制冷架构将成为多数下一代数据中心的优选解决方案。
Oracle五种表级排他锁的总结和归纳行级排他锁 (Row Exclusive Table Lock,RX)
名词解释:共享锁又叫做读锁,所有的事务只能对其进行读操作不能写操作,加上共享锁后其他事务不能再加排他锁了只能加行级锁。 用法: SELECT `id` FROM table WHERE id in(1,2) LOCK IN SHARE MODE 结果集的...
同时包含系统通用多线程模型与消息通讯、多对多关系的分布式锁、基于Servlet的HTTP框架、基于系统通用多线程模型的Websocket框架、支持行级锁的多线程锁等组件,按需选择组件,不绑架开发者。.zip,grain是一个极简的...
MySQL的锁分为表级锁、页级锁与行级锁。表级锁是MySQL中粒度大的一种锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。常使用的MYISAM与INNODB都支持表级锁定。 表级锁定分为两类,读锁与写锁。读锁是预期...
本文内容 •软件环境 •简单演示 Oracle 数据库并发导致行级锁 本文简单演示针对表主键并发导致的行级锁。并发是两个以上的用户对同样的数据进行修改(包括插入、删除和修改)。锁的产生是因为并发。没有并发,就...
数据库通过锁以及锁协议来进行并发控制,解决并发事务带来的问题,本篇博文主要是解析数据库的锁协议和Mysql的默认存储引擎InnoDB的锁机制。 如果对事务隔离级别以及并发事务带来的问题不熟悉可以翻阅我的另外一篇...