MYSQL的锁机制

MYSQL的锁机制按存储引擎划分

若加上事务需要另外分析

innodb 支持表锁和行锁

行级锁是加在索引上面的,若没有索引,则采取表锁

  • for update:IX锁(意向排它锁),即在符合条件的rows上都加了排它锁
  • lock in share mode:是IS锁(意向共享锁),即在符合条件的rows上都加了共享锁
  • 排它锁:X锁、 写锁,事务A对一个资源加了X锁后只有A本身能对该资源进行读和写操作,其他事务对该资源的读和写操作都将被阻塞,直到A释放锁为止
  • 共享锁:S锁、 读锁, 事务A锁定的数据其他事务可以共享读该资源,但不能写,直到事务A释放
  • Next-Key Lock是Gap Lock(间隙锁)和Record Lock(行锁)的结合版,都属于Innodb的锁机制

MyISAM 支持表锁和并发表锁

  • MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)表独占写锁(Table Write Lock)

  • MyISAM 默认开启 共享读锁 和 独占写锁 , 不需要使用命令来显式加锁

  • MyISAM 默认开启并发插入

  • 但是 当INSERT时,有SELECT同时进行读操作时,如果有多个 INSERT语句,它们将与这些SELECT语句同时排队并按顺序执行 。并发插入效果并不能立即就实现

  • concurrent_insert 的状态有 0 1(AUTO) 2

  • 0 禁止并发插入 , 1(AUTO)在MyISAM表已经在数据文件中没有孔 (也就是表中间没有删除任何一行)的情况下支持并发插入

  • 2 即使对于已删除行的表,也允许在表末尾进行并发插入。

  • MYSQL官方文档:https://dev.mysql.com/doc/refman/5.7/en/concurrent-inserts.html

posted @ 2020-10-15 18:35  爪哇搬砖  阅读(109)  评论(0编辑  收藏  举报