在MySQL中,關聯刪除是指當刪除一個表中的數據時,與其相關聯的另一個表中的數據也會被自動刪除。這種設計可以避免數據不一致的問題。以下是一個實際案例來說明關聯刪除的使用。
假設我們有兩個表:students
和 courses
,它們之間存在一對多的關系。每個學生可以選修多門課程,但每門課程只能被一個學生選修。表結構如下:
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);
CREATE TABLE courses (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
student_id INT,
FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE
);
在這個例子中,我們在 courses
表的 student_id
字段上添加了 ON DELETE CASCADE
約束。這意味著當 students
表中的某個學生被刪除時,與其相關的所有課程記錄也會被自動刪除。
實際案例:
假設我們有以下數據:
INSERT INTO students (name) VALUES ('張三');
INSERT INTO students (name) VALUES ('李四');
INSERT INTO courses (name, student_id) VALUES ('數學', 1);
INSERT INTO courses (name, student_id) VALUES ('英語', 1);
INSERT INTO courses (name, student_id) VALUES ('物理', 2);
現在,如果我們刪除學生張三(id = 1
),那么與學生張三相關的所有課程記錄也會被自動刪除:
DELETE FROM students WHERE id = 1;
執行上述刪除操作后,students
表中不再有學生張三的記錄,同時 courses
表中與學生張三相關的課程記錄也被自動刪除了:
SELECT * FROM students; -- 結果:
-- id | name
-- 2 | 李四
SELECT * FROM courses; -- 結果:
-- id | name | student_id
-- 3 | 物理 | 2
通過這個實際案例,我們可以看到關聯刪除在MySQL中的使用,它可以確保在刪除一個表中的數據時,與其相關聯的另一個表中的數據也會被自動刪除,從而避免數據不一致的問題。