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_core
的 ON 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'
您必须在 DROP TABLE
之前先删除这些找到的约束。
我正在尝试这个查询
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_core
的 ON 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'
您必须在 DROP TABLE
之前先删除这些找到的约束。