暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

开始聊聊恶心的“锁”-- 3.Oracle DML表级锁概念

InDataBase 2021-04-26
639

恶心的图又又来了


行锁有0,6

表锁有 0,1,2,3,4,5,6 


表级锁

再来一张图,直接给你整迷糊

这张表是锁与锁之间的兼容关系。

YES表示模式间是兼容的,NO表示不兼容。

因为0号锁其实就是没有锁,所以上图没有列出0号锁。


咱们对表级锁对比之间的故事,进行逐一的分析,并对锁与锁之间的兼容性说明。


⊙ 0号锁代码

◎ 通道号:0号(闲逛通道)

◎ 代码名称:NONE

◎ 目的:闲逛

◎ 资源竞争:不跟其他顾客竞争任何并发资源

◎ ORACLE产生条件:纯粹的SELECT语句

⊙ 1号锁代码

◎ 通道号:1号(残疾人孕妇幼儿闲逛通道)

◎ 代码名称:NULL

◎ 目的:只是闲逛,如果店被拆除,需要得到通知

◎ 资源竞争:不跟其他顾客竞争任何并发资源,但是这个顾客有权知道这个店以后的动态。

◎ ORACLE产生条件:在SQL生成执行计划时,由ORACLE内部产生的。

1号锁不能阻止DDL,但是有通告功能。


⊙ 2号锁代码

◎ 通道号:2号(预购通道)

◎ 代码名称:SS(RS)

◎ 目的:有意图买东西的人,但现在只是先来查看下货是不是值得我买,所以要打开柜台。它只是一个SELECT动作。

◎ 资源竞争:如果有通过2号入口进店的人,则0,1,2,3,4,5号通道都可以进人,但6号通道不允许进人

◎ ORACLE产生条件:

LOCK TABLE table IN ROW SHARE MODE;

2号锁是仅仅和6号锁冲突。也就是说不同Session可以都取得同一表的2号锁,不冲突。

⊙ 3号锁代码

◎ 通道号:3号(购买通道)

◎ 代码名称:SX(RX)

◎ 目的:购买东西的人,所以要打开柜台。

◎ 资源竞争:如果有通过3号入口进店的人,0,1,2,3号通道都可以进人,但4,5,6号通道不允许进人。

◎ ORACLE产生条件:

1.隐式产生表级锁,是由ORACLE自动加锁。比如,insert、update、delete、for update,隐式产生一个SX表级锁

2.显式产生表级锁,LOCK TABLE table IN ROW EXCLUSIVE MODE;

小结:

1、由dml(insert、update、delete、forupdate)产生的表锁一定会产生行锁。

2、lock table in xxx mode产生的表锁不产生行锁

以下的4,5,6号表级锁,都是要显式使用LOCK TABLE语句触发的,不是DML语句产生的。


⊙ 4号锁代码

◎ 通道号:4号(非买通道)

◎ 代码名称:S

◎ 目的:想让店停止销售,只允许顾客闲逛或者有企图买商品的人先查验货,绝不允许柜台里的商品有任何变化。这叫共享锁,也叫只读锁。

◎ 资源竞争:如果有通过4号入口进店的人,则0,1,2,4号通道都可以进人,但3,5,6号通道不允许进人。

◎ ORACLE产生条件:

LOCK TABLE table IN SHARE MODE;

不同Session可以都取得同一表的4号锁,不冲突。

⊙ 5号锁代码

◎ 通道号:5号(非买通道)

◎ 代码名称:SSX(SRX)

◎ 目的:与4号锁一样。这叫共享行排他锁。

◎ 资源竞争:如果有通过4号入口进店的人,则0,1,2号通道都可以进人,但3,4,5,6号通道不允许进人。

◎ ORACLE产生条件:

LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;

不同于4号锁,不同Session中不能取得同一表的5号锁。

⊙ 6号锁代码

◎ 通道号:6号(非买通道)

◎ 代码名称:X

◎ 目的:这锁是最高级别的表级锁,它也存在于行级锁。

◎ 资源竞争:如果有通过6号入口进店的人,则0,1号通道都可以进人,但2,3,4,5,6号通道不允许进人。

◎ ORACLE产生条件:

LOCK TABLE table IN EXCLUSIVE MODE;

6号通道只能一个人进。

现在多少可以对Oracle表级锁有所认识了吧?

下次做一个实验,让你清楚一点了解共享锁之间的兼容关系。



翻翻历史,温故知新

开始聊聊恶心的“锁”-- 2.Oracle DML行级锁概念

开始聊聊恶心的“锁”-- 1.一个故事了解Oracle有哪些锁

死锁与悲观锁、乐观锁不是一类东西

骨灰级科普-Oracle的序列可能不连续

后台翻页必用的rownum,你知道它的处理逻辑吗?

总在面试时被问COUNT(*)、COUNT(1)哪个快?

NVL系与Decode系,他们的差别你了解吗?

骨灰级科普-Oracle中的NULL,神马也不是

SQL也可以不那么简单



文章转载自InDataBase,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论