全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

MySQL锁的类型有哪些呢?

发布时间:2022-09-15 15:58:11
发布人:wjy

  说两个维度:

  共享锁(简称S锁)和排他锁(简称X锁)

  读锁是共享的,可以通过lock in share mode实现,这时候只能读不能写。

  写锁是排他的,它会阻塞其他的写锁和读锁。从颗粒度来区分,可以分为表锁和行锁两种。

  表锁和行锁

  表锁会锁定整张表并且阻塞其他用户对该表的所有读写操作,比如alter修改表结构的时候会锁表。

  行锁又可以分为乐观锁和悲观锁

  悲观锁可以通过for update实现

  乐观锁则通过版本号实现。

MySQL 锁的类型有哪些呢?

  两个维度结合来看:

  共享锁(行锁):Shared Locks

  读锁(s锁),多个事务对于同一数据可以共享访问,不能操作修改

  使用方法:

  加锁:SELECT * FROM table WHERE id=1 LOCK IN SHARE MODE

  释锁:COMMIT/ROLLBACK

  排他锁(行锁):Exclusive Locks

  写锁(X锁),互斥锁/独占锁,事务获取了一个数据的X锁,其他事务就不能再获取该行的读锁和写锁(S锁、X锁),只有获取了该排他锁的事务是可以对数据行进行读取和修改

  使用方法:DELETE/ UPDATE/ INSERT -- 加锁

  SELECT * FROM table WHERE ... FOR UPDATE -- 加锁

  COMMIT/ROLLBACK -- 释锁

  意向共享锁(IS)

  一个数据行加共享锁前必须先取得该表的IS锁,意向共享锁之间是可以相互兼容的 意向排它锁(IX) 一个数据行加排他锁前必须先取得该表的IX锁,意向排它锁之间是可以相互兼容的 意向锁(IS、IX)是InnoDB引擎操作数据之前自动加的,不需要用户干预; 意义: 当事务操作需要锁表时,只需判断意向锁是否存在,存在时则可快速返回该表不能启用表锁

  意向共享锁(IS锁)(表锁):Intention Shared Locks

  表示事务准备给数据行加入共享锁,也就是说一个数据行加共享锁 前必须先取得该表的IS锁。

  意向排它锁(IX锁)(表锁):Intention Exclusive Locks

  表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他 锁前必须先取得该表的IX锁。

相关文章

新手直播带货怎么做起来?有何技巧?

2023-09-19

做视频创作者怎么赚钱?个人怎么靠流量赚钱?

2023-09-19

怎样投抖加不花钱?别人能看出来吗?

2023-09-19

抖店怎么拦截快递?线下结算是什么?

2023-09-19

抖店平台商户被退店还能退货吗?如何提高评分?

2023-09-19

抖店入驻收费多少?开抖店费用是多少?

2023-09-19
在线咨询 免费试学 教程领取