//MyISAM 查看表的情况:show open tables; 加锁:lock table 表名 read(write),表二 read(write); 释放锁:unlock tables; 分析表锁定:show status like 'table%'; //innoDB 事务四个特性:ACID(Atomicity:原子性、Consistent:一致性、Isolation:隔离性、Durable:持久性) 并发事务处理带来的问题:更新丢失(最后的一个事务会覆盖)、脏读(读取未提交的数据)、不可重复读(事务A读取事务B已经提交的数据)、幻读(同样的检索条件读取的是新增的数据) 事务的四个隔离级别:未提交读、已提交读、可重复读、可序列化(查看当前事务的隔离级别:show variables like 'tx_isolation';) 分析行锁:show status like 'innodb_row_lock%'; //无索引、索引失效,行锁变表锁 //间隙锁: 使用范围条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做”间隙“,InnoDB也会对这个”间隙“加锁 危害:Query执行过程中通过范围查找的话,会锁定整个范围内所有的索引键值,即使这个键值并不存在; //手动加行锁: begin; select * from 表 where 条件 for update; -- ...业务处理 commit; //优化建议: 尽可能让所有数据检索都通过索引来完成,避免无索引导致行锁升级为表锁。 合理设计索引,尽量缩小锁的范围 尽可能减少索引条件,避免间隙锁 尽量控制事务大小,减少锁定资源量和时间长度 尽可能低级别事务隔离