本文將介紹 SQL 中的 ON DELETE, ON DELETE 是用於管理資料庫中的外鍵約束和相關資料的刪除行為。接下來將教你如何使用 ON DELETE 來保持資料的一致性和完整性。
ON DELETE
語句在定義外鍵約束時使用,指定當被參照表(父表)中的資料被刪除時,應如何處理參照表(子表)中的相關資料。主要有以下幾種類型:
讓我們透過具體的範例程式來瞭解ON DELETE
的運作方式。
當嘗試刪除父表中的記錄時,如果還有子表中的行參照該記錄,則操作將失敗。
-- 建立父表和子表
CREATE TABLE class (
classId INT PRIMARY KEY,
className VARCHAR(100)
);
CREATE TABLE student (
studentId INT PRIMARY KEY,
name VARCHAR(100),
classId INT,
FOREIGN KEY (classId) REFERENCES class(classId) ON DELETE NO ACTION
);
-- 插入示例數據
INSERT INTO class (classId, className) VALUES (1, 'Mathematics');
INSERT INTO student (studentId, name, classId) VALUES (101, 'Alice', 1);
-- 嘗試刪除父表中的記錄
DELETE FROM class WHERE classId = 1;
當刪除父表中的記錄時,自動刪除子表中所有參照該記錄的行。
-- 建立父表和子表
CREATE TABLE class (
classId INT PRIMARY KEY,
className VARCHAR(100)
);
CREATE TABLE student (
studentId INT PRIMARY KEY,
name VARCHAR(100),
classId INT,
FOREIGN KEY (classId) REFERENCES class(classId) ON DELETE CASCADE
);
-- 插入示例數據
INSERT INTO class (classId, className) VALUES (2, 'Science');
INSERT INTO student (studentId, name, classId) VALUES (102, 'Bob', 2);
-- 刪除父表中的記錄,並觀察子表的變化
DELETE FROM class WHERE classId = 2;
當父表中的記錄被刪除時,子表中所有參照該記錄的行將其外鍵值設為NULL。
-- 建立父表和子表
CREATE TABLE class (
classId INT PRIMARY KEY,
className VARCHAR(100)
);
CREATE TABLE student (
studentId INT PRIMARY KEY,
name VARCHAR(100),
classId INT,
FOREIGN KEY (classId) REFERENCES class(classId) ON DELETE SET NULL
);
-- 插入示例數據
INSERT INTO class (classId, className) VALUES (3, 'History');
INSERT INTO student (studentId, name, classId) VALUES (103, 'Charlie', 3);
-- 刪除父表中的記錄,並觀察子表的變化
DELETE FROM class WHERE classId = 3;
😊 感謝你的耐心閱讀,若是你喜歡這篇內容,可以透過以下方式表達你的喜歡 😊