删除SQL中的外键机制

时间:2016-01-25 05:37:01

标签: mysql

我有一个表,其中有一个外键引用另一个表

CREATE TABLE `redirector_logs` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `redirector_id` int(10) unsigned NOT NULL
  PRIMARY KEY (`id`),
  KEY `redirector_logs_redirector_id_foreign` (`redirector_id`),
  CONSTRAINT `redirector_logs_redirector_id_foreign` FOREIGN KEY (`redirector_id`) REFERENCES `redirectors` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

当我删除外键'redirector_logs_redirector_id_foreign'时,约束被删除但键仍然存在。

请告诉我为什么以及如何删除整个外键(包括密钥和约束)。

2 个答案:

答案 0 :(得分:1)

您创建的密钥实际上是一个索引,它独立于您创建的外键。

要删除您需要执行的密钥redirector_logs_redirector_id_foreign

DROP INDEX `redirector_logs_redirector_id_foreign` ON `redirector_logs`

答案 1 :(得分:0)

如果存在选项,请检查drop外键 IF(OBJECT_ID('FK_constraint_name','外键约束')IS NOT NULL) 开始     ALTER TABLE table_name DROP CONSTRAINT FK_Constraint_name 结束 FK无法放弃的可能性: - 子表可能包含尚未删除的数据 - 没有删除索引 - 另一个架构也参考了这个FK -Innodb内部数据字典与mysql不同步你可以使用“SHOW ENGINE INNODB STATUS”来检查InnoDB的状态