示例背景:
假设我们有两个表:departments(部门表)和 employees(员工表)。每个员工属于一个部门。我们希望,当删除某个部门时,所有属于该部门的员工也会被删除(级联删除)。
创建表结构:
departments 表用于存储部门信息。
employees 表用于存储员工信息,并且它引用了 departments 表中的 department_id 字段。
SQL 语句:
sql
-- 创建 departments 表
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(100) NOT NULL
);
-- 创建 employees 表,并设置外键约束,开启级联删除(ON DELETE CASCADE)
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
department_id INT,
FOREIGN KEY (department_id)
REFERENCES departments(department_id)
ON DELETE CASCADE -- 级联删除
);
说明:
departments 表有 department_id 作为主键。
employees 表有 employee_id 作为主键,并且 department_id 是外键,引用了 departments 表中的 department_id 字段。
ON DELETE CASCADE 表示当 departments 表中的某个部门被删除时,所有与该部门相关联的员工(employees 表中)也会被删除。
插入一些数据:
sql
-- 插入部门数据
INSERT INTO departments (department_id, department_name)
VALUES (1, 'HR'), (2, 'Engineering'), (3, 'Marketing');
-- 插入员工数据
INSERT INTO employees (employee_id, name, department_id)
VALUES
(1, 'Alice', 1),
(2, 'Bob', 2),
(3, 'Charlie', 2),
(4, 'David', 3);
删除部门并级联删除员工:
sql
-- 删除部门 2(Engineering),会自动删除所有属于该部门的员工(Bob 和 Charlie)
DELETE FROM departments WHERE department_id = 2;
结果:
departments 表中 ID 为 2 的部门(Engineering)将被删除。
employees 表中所有 department_id 为 2 的员工(Bob 和 Charlie)也会被删除,因而实现级联删除。
这样就完成了一个 MySQL 级联删除的例子,确保当删除父表中的记录时,相关的子表记录也会被自动删除。