私は SQL を学んでいますが、復習問題の 1 つに行き詰まっており、テキストブックで答えを見つけることができません。「カスケードを削除」するとき
それは何と「使用」されていますか?
- a. 主キー制約と一緒に使用されます
- b. 一意の制約と一緒に使用されます
- c. 参照制約と一緒に使用されます
- d. 型制約と一緒に使用されます
カスケード時に正しいタプルを識別するため、主キーと言いたいですか?私は正しい/間違っていますか、どちらが正しいかわかりません。
ありがとう。
私は SQL を学んでいますが、復習問題の 1 つに行き詰まっており、テキストブックで答えを見つけることができません。「カスケードを削除」するとき
それは何と「使用」されていますか?
カスケード時に正しいタプルを識別するため、主キーと言いたいですか?私は正しい/間違っていますか、どちらが正しいかわかりません。
ありがとう。
参照制約と一緒に使用されます。
参照制約の詳細
そのレコードへの FK を持つすべてのレコードを削除します。
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
が削除されたときに、トランザクションの最後に外部依存関係がまだ存在する場合、データベースはエラー メッセージを送信します。