我在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';检查列/键是否存在
答案 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列名数据类型;
希望这会对您有所帮助。