我们有一个表A和B的情况,其中A有几千行(约50k),B有几百万行(约5M)。表B有一列指向表A的主键。我们需要向表A添加一个列,并担心当alter语句运行时,它可能在表B上有一个读锁定。
我的第一个问题是,是真的,表B在改变表A时会被锁定吗?如果是,最好先将外键从B放到A然后再运行alter语句,然后重新创建外键。
我们正在使用MySQL 5.5,InnoDB和每个表的单独文件。
答案 0 :(得分:0)
你试过这个吗?
set foreign_key_checks = 0;
ALTER TABLE ...;
set foreign_key_checks = 1;
如果永久删除,可以删除外键。但暂时删除外键约束然后在ALTER
语句之后再次添加它将是一个开销。