删除外键MySQL不存在

时间:2018-10-16 13:40:27

标签: mysql foreign-keys

我在MySQL中有一个这样的表(这是使用show create table user_org_contacts返回的):

CREATE TABLE `user_org_contacts` (
 `user_org_contacts_id` int(11) NOT NULL AUTO_INCREMENT,
 `from_user_id` int(11) DEFAULT NULL,
 `to_org_user_id` int(11) DEFAULT NULL,
 `suggested_vacancy_id` int(11) DEFAULT NULL,
 `contact_date` datetime NOT NULL,
 `message` text,
 PRIMARY KEY (`user_org_contacts_id`),
 KEY `FK_Reference_53` (`from_user_id`),
 KEY `FK_Reference_54` (`to_org_user_id`),
 KEY `FK_Reference_55` (`suggested_vacancy_id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=latin1

我注意到我的FK_Reference_54是错误的,并且指向错误的表。因此,我想通过正确的FK来更改此设置。

这是我尝试过的:

ALTER TABLE `user_org_contacts` 
DROP FOREIGN KEY `FK_Reference_54`;  

ALTER TABLE `user_org_contacts`  
ADD CONSTRAINT `FK_Reference_54` 
    FOREIGN KEY (`to_org_user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE;  

这会产生以下错误:

  

1091-无法删除'FK_Reference_54';检查列/键是否存在

2 个答案:

答案 0 :(得分:1)

问题是您将索引与主键混淆。

关键字KEY实际上为您显示索引,而主键使用关键字CONSTRAINT ... FOREIGN KEY ...

示例:

nvm install node --reinstall-packages-from=node

因此,如果您要删除自己的INDEX,则只需调用此查询即可。

CONSTRAINT `FK_name` FOREIGN KEY (`current_field_name`)
REFERENCES `external_table_name` (`external_field_name`) ON DELETE CASCADE ON UPDATE CASCADE

下一次,我建议您为mysql使用某些UI,例如mysql workbench,这样您会立即注意到该问题。

答案 1 :(得分:0)

首先尝试删除该列 ALTER TABLE表名DROP COLUMN列 然后: ALTER TABLE表名添加列名数据类型。

或者您也可以尝试使用此Modify选项。 ALTER TABLE表名MODIFY COLUMN列名数据类型;

希望这会对您有所帮助。