我有一张这样的桌子:

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)

10-05 21:33