MySQL中的外键(Foreign Key)是一种数据库约束,用于建立两个表之间的关联。一对多关系是指在一个表(父表)中的一个记录可以与另一个表(子表)中的多个记录相关联。
MySQL中的外键约束主要有以下几种类型:
一对多关系在数据库设计中非常常见,例如:
假设有两个表:departments
(部门)和employees
(员工),它们之间是一对多的关系。
CREATE TABLE departments (
department_id INT PRIMARY KEY AUTO_INCREMENT,
department_name VARCHAR(255) NOT NULL
);
CREATE TABLE employees (
employee_id INT PRIMARY KEY AUTO_INCREMENT,
employee_name VARCHAR(255) NOT NULL,
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(department_id)
);
INSERT INTO departments (department_name) VALUES ('HR');
INSERT INTO employees (employee_name, department_id) VALUES ('Alice', 1);
INSERT INTO employees (employee_name, department_id) VALUES ('Bob', 1);
原因:插入的数据违反了外键约束,即子表中的department_id
在父表departments
中不存在。
解决方法:
department_id
在父表中存在。department_id
,可以先插入父表记录,再插入子表记录。INSERT INTO departments (department_name) VALUES ('Finance');
INSERT INTO employees (employee_name, department_id) VALUES ('Charlie', 2);
原因:删除父表记录时,子表中仍有引用该记录的外键。
解决方法:
ON DELETE CASCADE
选项,删除父表记录时自动删除子表中相关的记录。CREATE TABLE employees (
employee_id INT PRIMARY KEY AUTO_INCREMENT,
employee_name VARCHAR(255) NOT NULL,
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(department_ID) ON DELETE CASCADE
);
DELETE FROM employees WHERE department_id = 1;
DELETE FROM departments WHERE department_id = 1;
领取专属 10元无门槛券
手把手带您无忧上云