我正在修复一个混乱的数据库。我在这个数据库中有几个 MyISAM 和 InnoDB 表。我需要编写一个使用以下 3 个表的查询:
table_a => InnoDB
table_b => InnoDB
table_c => MyISAM
该查询需要大约一分钟才能运行,如果我的查询中发生表级锁定,我担心这可能会在我们的生产站点上产生问题。我不确定它是否会基于文档。我知道 MyISAM 锁定表而 InnoDB 锁定行,但我将它们一起使用。这是查询:
INSERT INTO
table_a (`x`, `y`, `z`)
SELECT
table_b.x, table_b.y, table_c.z
FROM
table_b, table_c
WHERE
table_b.id = table_c.id AND
table_b.value IS NOT NULL AND
table_b.id NOT IN (SELECT table_a.id FROM table_a WHERE 1);
我不确定执行此查询时会发生什么。我认为不会发生表锁定,因为写入发生在 InnoDB 的 table_a 上。但是我不确定这将如何管理,因为该写入操作基于 MyISAM 和 InnoDB 上发生的读取。我对如何管理锁定还不是很了解,我需要确定在执行此查询时这些表中的任何一个是否会锁定。感谢任何有帮助的人。