SQL-Delete级联与一起使用?
我正在学习SQL,我被一个复习问题困住了,在课本上找不到答案。当您“删除级联”时 它与什么一起“使用”SQL-Delete级联与一起使用?,sql,Sql,我正在学习SQL,我被一个复习问题困住了,在课本上找不到答案。当您“删除级联”时 它与什么一起“使用” a。它与主键约束一起使用 b。它与唯一约束一起使用 c。它与引用约束一起使用 d。它与类型约束一起使用 我想说主键,因为它将在级联时识别正确的元组?我是对的/错的吗?我只是不知道哪一个是对的 谢谢 它与引用约束一起使用 有关的详细信息它将删除对该记录具有FK的所有记录 删除foo中的记录时,引用该记录的键并指定了delete cascade的任何约束也将自动删除。如果没有该规范,当删除
- a。它与主键约束一起使用
- b。它与唯一约束一起使用
- c。它与引用约束一起使用
- d。它与类型约束一起使用
谢谢 它与引用约束一起使用
有关的详细信息它将删除对该记录具有FK的所有记录
删除
foo
中的记录时,引用该记录的键并指定了delete cascade
的任何约束也将自动删除。如果没有该规范,当删除foo
中的记录时,如果在事务结束时仍然存在任何外部依赖项,则数据库将发送错误消息。删除级联
用于外键
列,因此,C
在这里是正确的。这样考虑一下:对于级联的东西,这意味着它影响多个元素/节点/项目/任何东西<删除级联上的code>表示删除操作会导致级联操作到另一个元素/节点/项/任何内容上。因此正确答案是C
,引用约束(外键)。一行被删除,其他表(或同一表)中通过FK约束的相关行也被删除,因为它们之间的公共元素不再存在。投票结果被否决,因为您的原始答案暗示OP假设DELETE CASCADE与PKs一起使用是正确的。级联删除与FK一起使用,FK是引用约束的同义词。你仍然含糊不清地暗示OP的猜测是正确的。@MichaelBerkowski我明白了,尽管指定它只发生在FKs
——我将删除右边的,因为它模棱两可且具有误导性;谢谢
CREATE TABLE foo (
id serial,
num int,
PRIMARY KEY (id)
);
INSERT INTO foo(num) VALUES(1),(2),(3),(4);
CREATE TABLE bar (
foo_id bigint unsigned,
FOREIGN KEY (foo_id) REFERENCES foo (id) ON DELETE CASCADE
);
INSERT INTO bar(foo_id) VALUES (1),(2),(3),(4);
DELETE FROM bar WHERE foo_id = 3; -- notice 3 is only removed from bar
DELETE FROM foo WHERE id = 2; -- notice 2 is removed from both foo and bar