前言
外键是表的一个特殊字段,外键约束是为了保证多个表(通常为两个表)之间的参照完整性,即构建两个表的字段之间的参照关系。
设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表决定。例如,表示一个班级和学生关系,即每个班级有多个学生。首先应该有两个表:班级表和学生表,然后学生表有一个表示班级编号的字段no,其依赖于班级表的主键,这样字段no就是学生表的外键,通过该字段班级表和学生表建立了关系。
提示:以下是本篇文章正文内容,下面案例可供参考
一、设置表字段的外键约束(FOREIGN KEY,FK)
1.简介
- 一个班级表:
ID |
名称 |
班主任 |
101 |
六年级一班 |
tiger老师 |
102 |
六年级二班 |
王老师 |
班级表主键 <ID>
每一行对应着一个班级,而一个班级对应着多个学生,所以班级表和学生表的关系就是“一对多”:
ID |
姓名 |
班级ID |
性别 |
年龄 |
1 |
小花 |
101 |
M |
9 |
2 |
小红 |
102 |
F |
8 |
3 |
小军 |
102 |
M |
8 |
4 |
小白 |
101 |
F |
9 |
班级表<ID> 为学生表<班级ID >的外键
在具体设置FK约束时,设置FK约束的字段必须依赖于数据库中已经存在的父表的主键,同时外键可以为空(NULL)。
2.语句格式
设置表中某字段的FK约束非常简单,可以在MySQL数据库管理系统中通过SQL语句FOREIGN KEY来实现,其语法形式如下:
CREATE TABLE tablename_1(
propName1 propType ,
propName2 propType ,
......
[CONSTRAINT fk_name] FOREIGN KEY(propName1) REFERENCES table2_name(table2_column)
);
其中,tablename_1参数是要设置外键的表名,propName1参数是要设置外键的字段,table2_name是父表的名称,table2_column是父表中设置主键约束的字段名。
mysql> use school; #选择数据库school mysql> create table class(id int PRIMARY KEY, name varchar(128), teacher varchar(64)); #创建表class mysql> desc class ; #查询表class 的定义, describe class 效果等同 mysql> create table student (id int PRIMARY KEY AUTO_INCREMENT, name varchar(64) NOT NULL, class_id int, sex enum('M','F'), FOREIGN KEY(class_id) REFERENCES class(id) ); #创建表student, class_id 为表class id 字段的外键 mysql> insert into student(name, class_id, sex) values('小红', 2, 'M'); #插入记录,主键自增长 mysql> insert into student(name, sex) values('小军', 'M'); #插入记录,允许外键为空 |
总结
设置外键的格式:
create table 表名( 字段名 类型名,...... foreign key(要设置成外键的字段名) references 主键表名(外键依附表的主键名);