面试题答案
一键面试创建带有外键约束表的SQL语句示例
假设我们有两个表,departments
(部门表)和employees
(员工表),employees
表中的department_id
字段需要引用departments
表中的id
字段作为外键。
-- 创建部门表
CREATE TABLE departments (
id INT PRIMARY KEY AUTO_INCREMENT,
department_name VARCHAR(100) NOT NULL
);
-- 创建员工表,并设置外键约束
CREATE TABLE employees (
id INT PRIMARY KEY AUTO_INCREMENT,
employee_name VARCHAR(100) NOT NULL,
department_id INT,
-- 设置外键约束
FOREIGN KEY (department_id) REFERENCES departments(id)
);
外键约束维护参照完整性的原理
- 插入操作:当向
employees
表插入数据时,如果department_id
的值在departments
表的id
列中不存在,插入操作将失败。这确保了员工表中的部门ID总是对应于实际存在的部门,避免无效数据插入。 - 更新操作:如果尝试更新
departments
表中id
的值(被employees
表作为外键引用),而employees
表中存在对应的department_id
引用,更新操作会失败,除非先更新employees
表中的相关department_id
值,使其符合新的departments
表中的id
值。这防止了数据引用的不一致。 - 删除操作:如果尝试删除
departments
表中的一条记录,而该记录的id
被employees
表中的department_id
引用,删除操作会失败。这保证了在存在相关员工记录时,不会意外删除部门记录,从而维护了数据的一致性和参照完整性。
可以通过设置ON DELETE
和ON UPDATE
选项来改变这种默认行为,例如ON DELETE CASCADE
,当删除departments
表中的记录时,与之关联的employees
表中的记录也会被自动删除;ON UPDATE CASCADE
则在更新departments
表中的id
值时,自动更新employees
表中的department_id
值。示例如下:
CREATE TABLE employees (
id INT PRIMARY KEY AUTO_INCREMENT,
employee_name VARCHAR(100) NOT NULL,
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);