, 因为你还会碰到接下来我们要介绍的表级锁.
mysql表级锁有两种: 一种是表锁, 一种是元数据锁....在mysql 5.5 中引入了MDL, 当对一个表做增伤爱差操作的时候, 加MDL 读锁; 当对一个表做结构变更擦欧总的时候, 加MDL写锁.
读锁之间不互斥, 可以有多个线程对一张表增删改查....首先我们要解决长事务, 事务不提交, 就会一直占着MDL锁,
在mysql 的information_schema 库的innodb_trx表中, 可以查到当前执行中的事务....我见过这样的情况,最后业务开发就是把 lock tables 和 unlock tables 改成 begin 和 commit,问题就解决
MDL 会直到事务提交才释放,在做表结构变更的时候,一定要小心不要导致锁住线上查询和更新...全局锁和表锁都是server层实现的
MDL是防止DDL和DML并发的冲突
补充:
上述例子. sessionC在被sessionA阻塞后, sessionC的DDL操作处理等待, 为什么sessionD