gpt4 book ai didi

sql - 一次删除多个表

转载 作者:行者123 更新时间:2023-12-04 16:08:18 24 4
gpt4 key购买 nike

SQL Server 支持 DIE 语法( drop table if exists ):

Multiple tables can be dropped in any database. If a table being dropped references the primary key of another table that is also being dropped, the referencing table with the foreign key must be listed before the table holding the primary key that is being referenced.



例子:
CREATE TABLE t1(i INT PRIMARY KEY);
CREATE TABLE t2(i INT PRIMARY KEY);
CREATE TABLE t3(i INT PRIMARY KEY, t2_id INT REFERENCES t2(i));

丢弃对象的正确方法是:t1/t3,最后是t2。

假设我们运行:
DROP TABLE IF EXISTS t1,t2,t3;
-- Could not drop object 't2' because it is referenced by a FOREIGN KEY constraint.

一切都在预料之中,DDL无法成功完成,因为有FK持有。

现在,我期待 DDL 应该持有 全有或全无行为 .所以我应该仍然保持我的 3 张 table 完好无损。但事实并非如此,表 t1 和 t3 被删除了。
SELECT * FROM t1;
-- Invalid object name 't1'.

SELECT * FROM t2;
SELECT * FROM t3;
-- Invalid object name 't3'.

db<>fiddle demo

看起来它在内部是作为 3 个独立的 drop 语句执行的,这很奇怪。

表 t1 和 t3 消失了还是我遗漏了一些明显的东西?

最佳答案

问题是,DBMS 会删除它可以删除的任何表,但此操作不是原子的。如果你想要一个原子表达式,你可以使用条件 ROLLBACK 到事务中(更多信息请参见 here)

关于sql - 一次删除多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56622718/

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