MySQL:DROP TABLE 时出现错误 1217。引用它自己的主键的外键。 ON DELETE CASCADE 开启

MySQL : error 1217 on DROP TABLE. Foreign key refering on its own primary key. ON DELETE CASCADE is on

我正在尝试这个查询

DROP TABLE IF EXISTS Core;

在使用此查询创建的 table 上

CREATE TABLE Core (
    id serial PRIMARY KEY,

    title varchar(512),
    kind ENUM('User', 'Organisation', 'Channel', 'Collection', 'Text', 'Picture', 'Sound', 'Video', 'UserGroup'),
    is_activated BOOLEAN DEFAULT true,
    date_created DATETIME DEFAULT CURRENT_TIMESTAMP,
    date_updated DATETIME,
    date_augmented DATETIME,

    author_core BIGINT UNSIGNED NOT NULL,
    FOREIGN KEY (author_core) REFERENCES Core(id) ON DELETE CASCADE
)   

但我收到错误 #1217 - A foreign key constraint fails

我知道禁用外键检查的肮脏解决方法 SET foreign_key_checks = 0; 但我仍然想知道为什么字段 author_coreON DELETE CASCADE 没有发挥作用。

看起来还有另一个 table 引用了 Core table。您可以使用以下查询获取其他 table 的所有引用键:

SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_NAME = 'Core' AND TABLE_NAME <> 'Core'

demo on dbfiddle.uk

您必须在 DROP TABLE 之前先删除这些找到的约束。