繁体   English   中英

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

[英]MySQL: Dropping a foreign key constraint on an InnoDB table

我想从表中删除外键约束,这花费了很长时间,并且我想知道在生产环境中执行此操作会发生什么不好的事情。

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

根据要求提供更多信息:

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

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

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

首先,我必须说,最佳实践始终是在脱机环境中测试这种变化。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM