gpt4 book ai didi

mysql - 由于外键约束,无法删除 MySQL 表

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:42 27 4
gpt4 key购买 nike

我用

创建了 2 个表
CREATE TABLE projs 
(
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
compname VARCHAR (200),
title VARCHAR (200),
imageurl VARCHAR(300),
sumsmall VARCHAR (250),
sumfull VARCHAR (5000),
results VARCHAR (2000),
postdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
caseid MEDIUMINT NULL,
hide TINYINT NOT NULL,
carid MEDIUMINT,
FOREIGN KEY (caseid) REFERENCES cases(id) ON DELETE SET NULL,
FOREIGN KEY (carid) REFERENCES work_carousels(id) ON DELETE SET NULL
)

CREATE TABLE cases 
(
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
compname VARCHAR (200),
sumsmall VARCHAR (500),
situation VARCHAR (1000),
imageurl VARCHAR(300),
approach VARCHAR (1000),
deliverables VARCHAR (1000),
results VARCHAR (1000),
conclusion VARCHAR (1000),
postdate DATETIME DEFAULT CURRENT_TIMESTAMP,
carid MEDIUMINT,
FOREIGN KEY (carid) REFERENCES work_carousels(id) ON DELETE SET NULL
)

重要的部分是 projs 中有一列引用 cases 中的列。我收到错误:

#1217 - Cannot delete or update a parent row: a foreign key constraint fails

当我尝试

DROP TABLE cases;

这看起来很奇怪,因为我已经将 projs 中的列 caseid 配置为在它引用的内容被删除时变为 NULL。我尝试手动将这些值设置为 NULL:

UPDATE projs SET caseid=NULL;
DROP TABLE cases;

但得到了同样的错误。

知道我做错了什么吗?

最佳答案

您有一个约束(外键)正在引用要删除的表。当表被删除时,约束将没有任何意义,因为它引用了一个无法解析的对象。

首先,您需要删除对引用 casesprojs 的约束,然后您可以删除 cases

ON DELETE SET NULL 或任何您配置的内容

I've configured the column caseid in projs to become NULL if what it's referencing gets deleted

只适用于cases被删除的记录,不适用全表。

要删除外键,您需要使用 ALTER TABLE projs DROP FOREIGN KEY [keyname]。您需要将 [keyname] 替换为您可以从 SHOW CREATE TABLE projs

获得的 key 名称

关于mysql - 由于外键约束,无法删除 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32851989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com