一、参照完整性
参照完整性要求关系中不允许引用不存在的实体。在 MySQL 中设置参照完整性的方式是使用 外键约束 。所谓外键就是用于在两个表中的数据之间建立和加强链接的一列或多列的组合,可控制可在外键表中存储的数据。例如,有学生表和分数表两个表,表内容如下。
student 学生表:
stu_no | name | phone |
---|---|---|
2021001 | 张三 | 123456789 |
2021002 | 李四 | 987654321 |
score 分数表:
score_no | stu_no | gross_score |
---|---|---|
1 | 2021001 | 750 |
2 | 2021002 | 685 |
在分数表中有 stu_no 列存储的是学生表中的学生编号,当我们把这个字段设置为分数表的外键字段后,插入一条不存在的学生的分数将会报错。例如插入一条stu_no 编号为 2021003 的学生的分数,这时 MySQL 将会报错。这是因为在学生表中不存在编号为 2021003 的学生,如果想插入成功则必须现在学生表中创建编号为 2021003 这个学生后再向分数表插入这个学生的分数。
二、外键约束
上一小节提到了外键约束,那么什么是外键约束呢?外键约束是用于保持主表(父表)和从表(子表)的数据一直。在 MySQL 中只有 InnoDB 存储引擎支持外键约束。外键约束的语法如下:
[CONSTRAINT [symbol]] FOREIGRN KEY [index_name] (col_name,...) REFERENCES tbl_name(col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
在语法中 reference_option 指的是外键约束条件,外键约束条件包括如下五种选项:
- RESTRICT:拒绝对父表的删除或更新操作;
- CASCADE:从父表删除或更新时自动删除或更新子表中匹配的行;
- SET NULL:从父表删除或更新时自动设置子表对应的外键列为NULL;
- NO ACTION: 不采取任何动作;
- SET DEFAULT:使用默认约束
例子: 前述的学生表的分数表可以这样创建:
# 创建学生表
create table student(
stu_no varchar(30) not null primary key,
name varchar(30),
phone varchar(30)
) engine=InnoDB
# 创建分数表,设置 stu_no 为外键
create table score(
score_no int not null auto_increment primary key,
stu_no varchar(30),
gross_score int,
foreign key(stu_no) references student(stu_no)
) engine=InnoDB
今天的文章三十四、外键约束分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/13774.html