我正在學習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約束的其他表(或同一個表)中的相關行也被刪除,因爲它們之間的公共元素不再存在。 –