在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中的使用,它可以确保在删除一个表中的数据时,与其相关联的另一个表中的数据也会被自动删除,从而避免数据不一致的问题。