我有两张用
创建的表格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 - 无法删除或更新父行:外键约束失败
当我尝试
时DROP TABLE cases;
这看起来很奇怪,因为我已将caseid
中的列projs
配置为NULL
,如果它的引用被删除了。我尝试将这些值手动设置为NULL
:
UPDATE projs SET caseid=NULL;
DROP TABLE cases;
但得到了同样的错误。
知道我做错了吗?
答案 0 :(得分:3)
您有一个引用要删除的表的约束(外键)。删除表时,约束没有任何意义,因为它引用了无法解析的对象。
首先,您需要删除引用projs
的{{1}}上的约束,然后您可以删除cases
。
cases
或您配置的任何内容可以说明
我已经将projs中的caseidid配置为NULL,如果它引用的内容被删除
仅适用于被删除的ON DELETE SET NULL
中的记录,而不适用于整个表格。
要删除外键,您需要使用cases
。您需要将ALTER TABLE projs DROP FOREIGN KEY [keyname]
替换为您可以从[keyname]