Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

mysql外键约束

作者:潇洒一醉   发布日期:2025-10-02   浏览:37

-- 创建两个表,一个是父表 `department`,另一个是子表 `employee`,并设置外键约束

-- 创建部门表 department
CREATE TABLE department (
    dept_id INT PRIMARY KEY,  -- 部门ID,主键
    dept_name VARCHAR(50) NOT NULL  -- 部门名称
);

-- 创建员工表 employee,并设置外键约束
CREATE TABLE employee (
    emp_id INT PRIMARY KEY,  -- 员工ID,主键
    emp_name VARCHAR(50) NOT NULL,  -- 员工姓名
    dept_id INT,  -- 部门ID,外键
    FOREIGN KEY (dept_id) REFERENCES department(dept_id)  -- 设置外键约束,关联到 department 表的 dept_id 字段
);

-- 插入一些示例数据
INSERT INTO department (dept_id, dept_name) VALUES (1, 'HR'), (2, 'Engineering');
INSERT INTO employee (emp_id, emp_name, dept_id) VALUES (1, 'Alice', 1), (2, 'Bob', 2);

-- 尝试插入一条没有对应部门的员工记录(会失败)
INSERT INTO employee (emp_id, emp_name, dept_id) VALUES (3, 'Charlie', 3);  -- 这条语句会报错,因为 dept_id = 3 在 department 表中不存在

-- 删除部门时,如果该部门有员工,则删除操作会失败
DELETE FROM department WHERE dept_id = 1;  -- 这条语句会报错,因为 department 表中的 dept_id = 1 在 employee 表中有引用

-- 如果要删除部门,可以先删除或更新相关的员工记录
DELETE FROM employee WHERE dept_id = 1;
DELETE FROM department WHERE dept_id = 1;  -- 现在删除成功了

解释说明:

  1. 创建表:首先创建了两个表 departmentemployee,其中 employee 表的 dept_id 字段设置了外键约束,关联到 department 表的 dept_id 字段。
  2. 插入数据:插入了一些示例数据来演示外键约束的效果。
  3. 外键约束的作用
    • 当尝试插入一个 dept_id 不存在于 department 表中的员工记录时,MySQL 会抛出错误,防止数据不一致。
    • 当尝试删除一个被 employee 表引用的部门记录时,MySQL 也会抛出错误,防止删除后出现孤立的外键引用。
  4. 解决方法:如果需要删除部门,可以先删除或更新相关的员工记录,然后再删除部门。

上一篇:docker进入mysql

下一篇:mysql的varchar可以存多少汉字

大家都在看

mysqlavg函数保留小数

mysql显示表内容

mysql经纬度距离计算

mysql 加密

存储过程mysql

mysql with语句

mysql时间加减

mysql查询表名,模糊匹配

brew 启动mysql

unsigned在mysql中是什么意思

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站