gpt4 book ai didi

mysql - 在 MySQL 中删除带有外键的列

转载 作者:可可西里 更新时间:2023-11-01 06:27:26 25 4
gpt4 key购买 nike

我有以下 2 个表:

CREATE TABLE `personal_info` (
`p_id` int(11) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`initials` text NOT NULL,
`surname` text NOT NULL,
`home_lang` int(11) NOT NULL,
PRIMARY KEY (`p_id`),
KEY `home_lang` (`home_lang`),
CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`home_lang`) REFERENCES `language_list` (`ll_id`)
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=latin1

CREATE TABLE `language_list` (
`ll_id` int(11) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
PRIMARY KEY (`ll_id`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=latin1

我正在尝试从具有以下内容的表中删除一列:

ALTER TABLE `personal_info` DROP `home_lang`

但由于收到此错误而无法执行此操作:

#1025 - Error on rename of '.\MyDB\#sql-112c_82' to '.\MyDB\personal_info' (errno: 150)

我尝试先删除索引,然后删除列:

ALTER TABLE personal_info DROP INDEX home_lang

但随后出现以下错误:

#1553 - Cannot drop index 'home_lang': needed in a foreign key constraint 

所以我尝试删除外键:

ALTER TABLE personal_info DROP FOREIGN KEY home_lang

但是收到这个错误:

#1025 - Error on rename of '.\MyDB\personal_info' to '.\MyDB\#sql2-112c-8d' (errno: 152)

我还尝试过先将所有值设置为空:

update personal_info set home_lang = null

但随后收到此错误:

#1452 - Cannot add or update a child row: a foreign key constraint fails (`MyDB`.`personal_info`, CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`home_lang`) REFERENCES `language_list` (`ll_id`))

现在我卡住了。我尝试了一些方法,但就是无法删除该列。除了删除列之外,我不允许以任何方式更改数据库。

最佳答案

您的 DROP FOREIGN KEY 语法使用了错误的键名。它试图将您的“普通”索引放在 home_lang 字段中。它不是外键本身。

CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`home_lang`) REFERENCES `language_list` (`ll_id`)
^^^^^^^^^^^^^^^^^^^^^--- THIS is the name of the foreign key

尝试:

ALTER TABLE personal_info DROP FOREIGN KEY `personal_info_ibfk_1`

关于mysql - 在 MySQL 中删除带有外键的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21809749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com