mysql - 即使存在也无法删除密钥:错误代码:1091
问题描述
我有一个看起来像这样的表:
CREATE TABLE `articles`
(
`article_id` INT(10) NOT NULL auto_increment,
`pubsrc_id` INT(10) NOT NULL,
`pub_id` VARCHAR(16) NOT NULL
PRIMARY KEY (`article_id`),
UNIQUE KEY `pubsrc_id` (`pubsrc_id`,`pub_id`),
CONSTRAINT `pub_articles_ibfk_1` FOREIGN KEY (`pubsrc_id`) REFERENCES `pub_sources` (`pubsrc_id`) ON
DELETE RESTRICT
ON
UPDATE RESTRICT,
CONSTRAINT `pub_articles_ibfk_2` FOREIGN KEY (`pubsrc_id`) REFERENCES `pub_sources` (`pubsrc_id`)
)
还有另一个表,前一个表有一个键:
CREATE TABLE `pub_sources`
(
`pubsrc_id` INT(11) NOT NULL,
`pubsrc_name` VARCHAR(32) NOT NULL
PRIMARY KEY (`pubsrc_id`)
)
我正在尝试使用以下命令删除外键:
SET SESSION SQL_SAFE_UPDATES = 0;
SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE `articles` DROP FOREIGN KEY `pubsrc_id`;
但得到以下错误:
Error Code: 1091. Can't DROP 'pubsrc_id'; check that column/key exists
解决方案
您需要通过其约束名称而不是定义它的列的名称来删除外键。
不行:
mysql> ALTER TABLE `articles` DROP FOREIGN KEY `pubsrc_id`;
ERROR 1091 (42000): Can't DROP 'pubsrc_id'; check that column/key exists
好的:
mysql> ALTER TABLE `articles` DROP FOREIGN KEY `pub_articles_ibfk_1`;
Query OK, 0 rows affected (0.03 sec)
推荐阅读
- reactjs - react testing library render component conditionally
- python - 从本地 .whl 文件安装 Elastic Beanstalk Python requirements.txt
- for-loop - 在 Pine 脚本中编写 for 循环
- typescript - 将字符串传递给抽象类的构造函数
- c# - 选择 ID 匹配 int 数组的 SQLite.NET 记录
- javascript - 如何创建在您的网站中显示页面的链接,而不是路由到 URL 链接?
- twitter-bootstrap - 软键盘打开时引导模式滚动太多
- c# - 无法将最终的tic tac编译为我发现的代码,因为它使用的编码语言与我正在学习的语言不同
- google-apps-script - 使用 var ss = SpreadsheetApp.openById(SpreadsheetID) 时出现错误值错误;
- ajax - Symfony 通过 ajax 重定向