gpt4 book ai didi

sql - 使用数据作为外键删除具有其他表的 SQL 中的多个条目

转载 作者:行者123 更新时间:2023-11-29 12:47:18 24 4
gpt4 key购买 nike

我有几个表,它们使用外键引用一个主表。

我的目标是从主表中删除一条语句,然后删除所有将数据作为外键的语句。

但是,正如我所料,我得到了约束错误,因为引用在从其他表中删除之前就被删除了。有什么方法可以告诉 SQL 我想从数据也用作外键的所有表中删除吗?

最佳答案

要将父表上的删除级联到引用表,请使用ON DELETE CASCADE 外键。但是,如果您要从主表中删除所有 行,则使用TRUNCATE 可以更好地解决您的问题;看到这篇文章的结尾。

您可以 ALTER TABLE to change a default ON DELETE NO ACTION foreign key to ON DELETE CASCADE .删除约束,然后使用 ON DELETE CASCADE 修饰符重新创建它。参见 CREATE TABLEconstraints documentation有关外键约束语法的信息。

简而言之,您使用 col coltype REFERENCES fktable(fkcol) ON DELETE CASCADE 而不是 col coltype REFERENCES fktable(fkcol)

如果您使用ON DELETE CASCADE,那么为了获得稍微不错的性能,在外键列上创建索引至关重要。即便如此,对于从目标表中批量删除,首先从每个外键引用表中删除通常要快得多,而不是依赖级联。

如果您正在使用 ON DELETE CASCADE,您可能还想使用 ON UPDATE CASCADE


如果您要删除主表中的所有行,而不仅仅是其中的一部分,您可能会更好 truncating the tables with TRUNCATE ... CASCADE :

CASCADE

Automatically truncate all tables that have foreign-key references to any of the named tables, or to any tables added to the group due to CASCADE.

关于sql - 使用数据作为外键删除具有其他表的 SQL 中的多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13114719/

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