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