删除外键mysql不存在

r55awzrz  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(427)

我在mysql中有这样一个表(这是使用show create table user\u org\u 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\u参考号是错误的,指向了错误的表。所以我想用正确的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';检查列/键是否存在

mcvgt66p

mcvgt66p1#

首先尝试删除列alter table tablename drop column columname;然后:alter table tablename add columnname datatype。
或者你也可以像这样尝试这个修改选项。alter table tablename修改column columnname数据类型;
希望这对你有帮助。

k3bvogb1

k3bvogb12#

问题是你把索引和主键混淆了。
关键字键实际上是显示索引,而主键使用关键字约束。。。外键。。。
例子:

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

因此,在您的例子中,如果您想删除索引,您只需要调用这个查询

ALTER TABLE `user_org_contacts` 
DROP INDEX `FK_Reference_54`;

下一次,我建议您使用mysql工作台之类的ui,这样您会立即注意到这个问题。

相关问题