2013-08-24 78 views
1

我正在学习SQL,我被困在其中一个复习题上,在教科书中找不到答案。当你'删除级联'SQL - 删除级联用于?

这是什么'使用'?

  • a。它与主键约束一起使用
  • b。它与一个唯一的限制条件一起使用
  • c。它与参考约束一起使用。
  • d。它与类型约束一起使用

我想说主键,因为它会在级联时识别正确的元组吗?我是对/错,我只是不知道哪一个是对的。

谢谢。

+1

'DELETE CASCADE'与'Foreign Key'列一起使用,所以'C'在这里是正确的。 – MarcinJuraszek

+0

通过这种方式来思考:对于某些级联,这意味着它影响多个元素/节点/项目/任何。 “ON DELETE CASCADE”意味着删除会导致对另一个元素/节点/项目/任何事件的级联操作。所以正确答案是'C',引用约束(外键)。一行被删除,并且通过FK约束的其他表(或同一个表)中的相关行也被删除,因为它们之间的公共元素不再存在。 –

回答

1

它删除有FKS该记录的所有记录。

See Fiddle


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中的记录被删除时,如果在事务结束时仍存在任何外部依赖关系,则数据库将发送错误消息。

+0

由于您的原始答案意味着OP在假设DELETE CASCADE与PK一起使用时是正确的,所以它被降低了。级联删除与FK一起使用,它们是参考约束的同义词。你仍含糊地暗示OP的猜测是正确的。 –

+1

@MichaelBerkowski我看到了,尽管指出它只发生在'FKs' - 我会删除'Right',因为它是模棱两可和误导性的;谢谢 – vol7ron