【发布时间】:2018-07-25 20:09:37
【问题描述】:
我需要重命名 fk 约束(删除所有 fk,创建新的),但 MySql(因为 InnoDB 引擎)为这些约束创建了索引。 我需要手动删除索引吗?还是会导致问题?请有人描述一下这一点。
【问题讨论】:
标签: mysql constraints innodb database-indexes
我需要重命名 fk 约束(删除所有 fk,创建新的),但 MySql(因为 InnoDB 引擎)为这些约束创建了索引。 我需要手动删除索引吗?还是会导致问题?请有人描述一下这一点。
【问题讨论】:
标签: mysql constraints innodb database-indexes
不会导致问题。
添加一个 FK应该发现已经有足够的索引而不是添加第二个。即使添加了冗余索引,也没有什么坏处。
我想知道 -- 你为什么关心约束名称是什么?
从 5.6 文档开始:“对于 ALTER TABLE,与 CREATE TABLE 不同,ADD FOREIGN KEY 会忽略 index_name 如果给定并使用自动生成的外键名称。作为一种解决方法,包括 CONSTRAINT 子句以指定外键名称:ADD CONSTRAINT name FOREIGN KEY (....) .. " 和 "ALTER TABLE ... ALGORITHM=INPLACE 支持在同一 ALTER TABLE 语句中添加和删除外键,但 ALTER TABLE ... ALGORITHM=COPY 不支持。"
我提出这一点的目的是,如果您将所有对表的更改放入单个语句中,ALTER通常会运行得更快。但是DROP + ADD 在COPY 的情况下是不允许的。
【讨论】: