在MySQL中,關(guān)聯(lián)刪除是指當(dāng)刪除一個(gè)表中的數(shù)據(jù)時(shí),與其相關(guān)聯(lián)的另一個(gè)表中的數(shù)據(jù)也會(huì)被自動(dòng)刪除。這種設(shè)計(jì)可以避免數(shù)據(jù)不一致的問(wèn)題。以下是一個(gè)實(shí)際案例來(lái)說(shuō)明關(guān)聯(lián)刪除的使用。
假設(shè)我們有兩個(gè)表:students
和 courses
,它們之間存在一對(duì)多的關(guān)系。每個(gè)學(xué)生可以選修多門課程,但每門課程只能被一個(gè)學(xué)生選修。表結(jié)構(gòu)如下:
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
);
在這個(gè)例子中,我們?cè)?courses
表的 student_id
字段上添加了 ON DELETE CASCADE
約束。這意味著當(dāng) students
表中的某個(gè)學(xué)生被刪除時(shí),與其相關(guān)的所有課程記錄也會(huì)被自動(dòng)刪除。
實(shí)際案例:
假設(shè)我們有以下數(shù)據(jù):
INSERT INTO students (name) VALUES ('張三');
INSERT INTO students (name) VALUES ('李四');
INSERT INTO courses (name, student_id) VALUES ('數(shù)學(xué)', 1);
INSERT INTO courses (name, student_id) VALUES ('英語(yǔ)', 1);
INSERT INTO courses (name, student_id) VALUES ('物理', 2);
現(xiàn)在,如果我們刪除學(xué)生張三(id = 1
),那么與學(xué)生張三相關(guān)的所有課程記錄也會(huì)被自動(dòng)刪除:
DELETE FROM students WHERE id = 1;
執(zhí)行上述刪除操作后,students
表中不再有學(xué)生張三的記錄,同時(shí) courses
表中與學(xué)生張三相關(guān)的課程記錄也被自動(dòng)刪除了:
SELECT * FROM students; -- 結(jié)果:
-- id | name
-- 2 | 李四
SELECT * FROM courses; -- 結(jié)果:
-- id | name | student_id
-- 3 | 物理 | 2
通過(guò)這個(gè)實(shí)際案例,我們可以看到關(guān)聯(lián)刪除在MySQL中的使用,它可以確保在刪除一個(gè)表中的數(shù)據(jù)時(shí),與其相關(guān)聯(lián)的另一個(gè)表中的數(shù)據(jù)也會(huì)被自動(dòng)刪除,從而避免數(shù)據(jù)不一致的問(wèn)題。