myisam锁表机制


锁表机制

  • 锁机制

a.加锁读(共享锁):不会阻塞读请求(select, insert),阻塞写(update, delete)请求

b.加锁写(独占锁):阻塞其它读写(select, delete, insert, update)请求

  • 锁耗时多长?

取决于sql耗时。控制好sql耗时,锁表的问题并不大。

测试数据

生成1000万条测试数

表user(id, username, password, age, sex)

存储引擎MyISAM,id建立索引

加锁读,select,insert不阻塞,update,delete阻塞

打开两个客户端 客户端1全表扫描

select * from user

客户端2测试阻塞

select * from user limit 10;    #结果不阻塞

insert into user(username, password, age, sex)
values("aaaaa", "bbbb", 10, 1); #结果不阻塞

update user set username="aaa" where id =90001;  #结果阻塞

delete from user where id =10000006  #结果阻塞

加锁写,select,insert,update,delete都阻塞

客户端1全表扫描写

update set username="aaaaaaa"
where username="不存在的值让sql扫描全表"

客户端2测试阻塞

重复上面select, insert, update, delete结果都阻塞


上篇: flask自动重连数据库 下篇: 思考大表统计的优化策略