3

我们有一种情况,我们有一个表 A 和 B,其中 A 有几千行(大约 50k),B 有几百万行(大约 5M)。表 B 有一列指向表 A 的主键。我们需要在表 A 中添加一列,并担心当 alter 语句运行时,它可能会对表 B 产生读锁。

我的第一个问题是,在更改表 A 时表 B 会被锁定,这是真的吗?如果是,最好先将外键从 B 删除到 A,然后运行 ​​alter 语句,然后重新创建外键。

我们为每个表使用 MySQL 5.5、InnoDB 和单独的文件。

4

1 回答 1

0

你试过这个吗?

set foreign_key_checks = 0;
ALTER TABLE ...;
set foreign_key_checks = 1;

如果永久删除是安全的,您可以删除外键。但是暂时删除外键约束然后在ALTER语句之后再次添加它会是一个开销。

于 2013-04-12T21:10:18.830 回答