首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MySQL中删除带有外键的列

在MySQL中删除带有外键的列
EN

Stack Overflow用户
提问于 2014-02-16 18:01:41
回答 3查看 49.8K关注 0票数 17

我有以下两个表:

代码语言:javascript
运行
复制
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

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

代码语言:javascript
运行
复制
ALTER TABLE `personal_info` DROP `home_lang`

但由于我收到此错误,因此无法执行此操作:

代码语言:javascript
运行
复制
#1025 - Error on rename of '.\MyDB\#sql-112c_82' to '.\MyDB\personal_info' (errno: 150)

我尝试先删除索引,然后使用以下命令删除列:

代码语言:javascript
运行
复制
ALTER TABLE personal_info DROP INDEX home_lang

但随后我得到了以下错误:

代码语言:javascript
运行
复制
#1553 - Cannot drop index 'home_lang': needed in a foreign key constraint 

所以我试着去掉外键:

代码语言:javascript
运行
复制
ALTER TABLE personal_info DROP FOREIGN KEY home_lang

但是收到了这个错误:

代码语言:javascript
运行
复制
#1025 - Error on rename of '.\MyDB\personal_info' to '.\MyDB\#sql2-112c-8d' (errno: 152)

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

代码语言:javascript
运行
复制
update personal_info set home_lang = null

但随后收到了这个错误:

代码语言:javascript
运行
复制
#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`))

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

EN

Stack Overflow用户

回答已采纳

发布于 2014-02-16 18:05:49

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

代码语言:javascript
运行
复制
CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`home_lang`) REFERENCES `language_list` (`ll_id`)
            ^^^^^^^^^^^^^^^^^^^^^--- THIS is the name of the foreign key

尝试:

代码语言:javascript
运行
复制
ALTER TABLE personal_info DROP FOREIGN KEY `personal_info_ibfk_1`
票数 31
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21809749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档