MySQL:在InnoDB表上删除外键约束

时间:2014-01-13 13:21:08

标签: mysql constraints innodb

我想从表中删除外键约束,这需要很长时间,我想知道在生产环境中执行此操作会发生什么坏事。

ALTER TABLE table DROP FOREIGN KEY fk_my_foreign_key;
  1. 为什么要这么久?
  2. 我可以加快速度吗?
  3. 在中间打断进程是否安全?
  4. 在生产服务器上运行此类操作是否有任何副作用?
  5. alter table失败时是否存在任何一致性问题(与服务器的连接丢失)?在这种情况下,当您无法使用不同的配置(最大数据包大小)重新启动服务器时该怎么办?
  6. 根据要求提供更多信息:

    • Mysql Server版本:5.5.34
    • 外键引用同一个表中的列
    • 表有大约8000万行
    • 表上的键+约束,删除CASCADE上的ON UPDATE CASCADE
      

    在大多数情况下,ALTER TABLE通过制作临时副本来工作   原始表。在副本上执行更改,然后执行   删除原始表并重命名新表。虽然ALTER   TABLE正在执行,原始表可由其他会话读取。   对表的更新和写入将停止,直到新表为止   准备好,然后自动重定向到新表而不用   任何失败的更新。感谢。

    其他案件怎么样?我可以阻止这种锁吗?

1 个答案:

答案 0 :(得分:-2)

首先,我必须说最佳实践总是在离线环境中测试这样的变化。

复制使用的表是?如果是这样,你需要先删除它。此外,如果当前正在使用该表,则可以将其锁定在进程中,检查活动监视器并查找死锁。确保密钥也不被任何索引引用

是个好主意

为了安全正确地删除外键,可以在Google上找到许多详细的文章。