并发性
行锁和表锁的区别
表锁-myISAM引擎-开销小,加锁快,不支持事务;
锁级粒度最大,发生锁冲突概率最高,并发度最低,无死锁。
锁是对表操作的,所以自然锁住全表的表锁就不会出现死锁。
行锁-偏写-InnoDb引擎-开销大,加锁慢,支持事务;
锁级粒度最小,发生锁冲突的概率最低,并发性最高,会死锁。
行锁也分读写锁:
读锁(共享锁S):针对同一份数据,多个读操作可以同时进行而不会相互影响,自己写会报错,别的写操作会阻塞直到锁被释放
写锁(排他锁X):当写操作没有完成前,它会阻断其他读锁和写锁,别的读和写操作会阻塞直到锁被释放
insert ,delete,update在事务中都会自动默认加上排它锁。
读写锁区别:读锁会阻塞其他写操作但不影响读,写锁会阻塞其他读写操作
表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)
差看哪些表被加锁了:show open tables;在in_use字段有1的
加读锁:lock table mytable read;
解锁:unlock table;
加写锁:lock table mytable write;
意向共享锁IS:事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。
意向排他锁IX:事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。