2013-08-24 79 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