2014-01-13 107 views
2

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

ALTER TABLE table DROP FOREIGN KEY fk_my_foreign_key; 
  1. 为何需要那么久吗?
  2. 我可以加快速度吗?
  3. 是否安全地中断中间的过程?
  4. 在生产服务器上运行这样的操作是否有任何副作用?
  5. 当alter table失败(丢失与服务器的连接)时是否存在任何一致性问题?在这种情况下,如果无法使用其他配置(最大数据包大小)重新启动服务器,该怎么办?根据要求

的更多信息:

  • MySQL服务器版本:34年5月5日
  • 外键引用在同一个表
  • 表中列有行的8000万左右
  • 关键+表上的约束,ON UPDATE CASCADE ON DELETE CASCADE

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

其他情况呢?我可以防止这种锁吗?

+0

您需要添加更多关于您的环境的数据。首先服务器版本,那么你的表格是多少,它们有多大。 –

+0

编辑,谢谢 – Aki

+0

确实更新/删除级联 – Aki

回答

-2

首先,我必须说最佳做法总是在脱机环境中测试这种变化。

复制是否使用表?如果是这样,你需要先删除它。此外,如果该表当前正在使用,它可能会被锁定在一个进程中,请检查活动监视器并查找死锁。这是一个好主意,以确保密钥也没有被任何索引引用

要安全和正确地删除外键,有许多详细的文章,可以在谷歌找到。