MySQL—约束—外键约束(基础)-员工表:emp

时间:2024-06-08 12:34:10
CREATE TABLE emp (
    id INT AUTO_INCREMENT COMMENT 'ID' PRIMARY KEY,
    name VARCHAR(50) NOT NULL COMMENT '姓名',
    age INT COMMENT '年龄',
    job VARCHAR(20) COMMENT '职位',
    salary INT COMMENT '薪资',
    entrydate DATE COMMENT '入职时间',
    managerid INT COMMENT '直属领导ID',
    dept_id INT COMMENT '部门ID'
) COMMENT '员工表';

INSERT INTO emp (id, name, age, job, salary, entrydate, managerid, dept_id) VALUES (1,'金庸',66,'总裁',20000,'2000-01-01',null,5),
                                                                                   (2,'张无忌',20,'项目经理',12500,'2005-12-05',1,1),
                                                                                   (3,'杨逍',33,'开发',8400,'2000-11-03',2,1),
                                                                                   (4,'韦小笑',48,'开发',11000,'2002-02-05',2,1),
                                                                                   (5,'常遇春',43,'项目经理',10500,'2004-09-07',3,1),
                                                                                   (6,'小昭',19,'程序员鼓励师',6600,'2004-10-12',2,1);

表数据插入成功!

三、问题与解决

目前这两张表逻辑上有着关联,员工表中的部门id:dept_id 对应着部门表的 id 。但是我们没有设置它们之间的物理外键,就无法保证数据的完整性。

如果没有设置,那么当我删除部门表中的任意一个id,那么员工表的数据没有任何变化,就会出现数据不完整和一致性的问题。所以我们就要去学习建立外键关联。

四、添加外键约束

(1)语法

添加外键。语法有两种情况。

第一种(是在创建表的时候):直接添加

第二种: (表结构创建好了之后):额外增加这样的一个外键就可以用了

注意

1、ALTER TABLE 表名 :修改指定表名

2、ADD CONSTRAINT:add constraint :添加 限制

3、外键名称可以自己定义

4、ROREIGN KEY :foreign key: 外键 

5、REFERENCES :references:参考

(2)对上面的两张表进行操作 

给员工表 emp 添加外键。

/* add constraint 外键  括号里代表的外键字段 */
ALTER TABLE emp ADD CONSTRAINT fk_emp_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id);

执行前的表视图:

执行后的表视图:

这时就成功添加好了外键约束了。

(3)测试外键的作用是否对数据的完整性有用 

外键添加成功之后。这次测试一下再去删除部门表 dept 中的id字段,看能不能删除成功?

因为要删除父表 dept 中id为1的字段,而子表 emp 中的字段dept_id 还有那么多值关联着id=1的记录,不能直接删除,这样就保证了数据的一致性和完整性。

五、删除外键约束

语法:

注意

1、ALTER TABLE :修改指定表

2、DROP:删除

操作:

ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept_id;

外键删除成功! 

这篇博客的所有内容就到这了。