gpt4 book ai didi

mysql - 删除表约束问题

转载 作者:搜寻专家 更新时间:2023-10-30 23:19:26 26 4
gpt4 key购买 nike

我正在创建两个这样的表:

CREATE TABLE abc (
id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(64) NOT NULL,
created DATETIME DEFAULT '0000-00-00 00:00:00',
updated DATETIME DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE def (
abc_id INTEGER NOT NULL DEFAULT 0,
name VARCHAR(64) NOT NULL,
value LONGTEXT,
PRIMARY KEY(name, abc_id),
CONSTRAINT fk_def FOREIGN KEY(id)
REFERENCES abc(id) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

当从 ABC 中删除一行时,它应该告诉 mysql 自动从 DEF 中删除相应的行。

但这不适用于 DROP 操作。如果我尝试删除表 abc,我会收到一条错误消息,指出外键约束失败。看来我需要先降DEF,然后才能降ABC。我不明白为什么,因为放下 ABC 应该也会自动放下 DEF,对吧?或者至少通过从 ABC 中删除与 id 匹配的行来清空它...

最佳答案

不,数据库不会自动执行此操作,并且有充分的理由。它的存在是为了防止您破坏数据库并使无效的外键指向不存在的表。一切都按预期运行。

所以是的,如果你想删除表,你需要先删除依赖约束。 ON DELETE 外键子句用于删除行,而不是删除表:)

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

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