这是一种随机行为(重新启动 mysql 会话后不会再次发生),当我将 DDL 查询包装在事务 T1 中,同时我使用select同一个表上的查询启动另一个事务 T2 时,DDL 查询卡在等待表中预期的元数据锁定,任何其他选择查询都会等待 DDL 查询完成。但是提交 T2 后,DDL 应该获得元数据锁并完成,但它仍然等待表元数据锁状态。
连接1查询:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER TABLE merchants ADD COLUMN temp6 varchar(255);
Run Code Online (Sandbox Code Playgroud)
连接2查询:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from merchants where account_id=null;
Empty set (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
查询的顺序是:
Server version: …Run Code Online (Sandbox Code Playgroud)