我正在学习SQL,我被困在其中一个复习题上,在教科书中找不到答案。当你'删除级联'SQL - 删除级联用于?
这是什么'使用'?
- a。它与主键约束一起使用
- b。它与一个唯一的限制条件一起使用
- c。它与参考约束一起使用。
- d。它与类型约束一起使用
我想说主键,因为它会在级联时识别正确的元组吗?我是对/错,我只是不知道哪一个是对的。
谢谢。
我正在学习SQL,我被困在其中一个复习题上,在教科书中找不到答案。当你'删除级联'SQL - 删除级联用于?
这是什么'使用'?
我想说主键,因为它会在级联时识别正确的元组吗?我是对/错,我只是不知道哪一个是对的。
谢谢。
它与参考约束一起使用。
它删除有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
当从foo
记录被删除,则引用该记录的一个键并且具有指定delete cascade
任何限制,也将被自动删除。如果没有该规范,当foo
中的记录被删除时,如果在事务结束时仍存在任何外部依赖关系,则数据库将发送错误消息。
由于您的原始答案意味着OP在假设DELETE CASCADE与PK一起使用时是正确的,所以它被降低了。级联删除与FK一起使用,它们是参考约束的同义词。你仍含糊地暗示OP的猜测是正确的。 –
@MichaelBerkowski我看到了,尽管指出它只发生在'FKs' - 我会删除'Right',因为它是模棱两可和误导性的;谢谢 – vol7ron
'DELETE CASCADE'与'Foreign Key'列一起使用,所以'C'在这里是正确的。 – MarcinJuraszek
通过这种方式来思考:对于某些级联,这意味着它影响多个元素/节点/项目/任何。 “ON DELETE CASCADE”意味着删除会导致对另一个元素/节点/项目/任何事件的级联操作。所以正确答案是'C',引用约束(外键)。一行被删除,并且通过FK约束的其他表(或同一个表)中的相关行也被删除,因为它们之间的公共元素不再存在。 –