MySQL—表的完整性约束(外键约束)(一)
1、什么是完整性约束?
为防止不符合规范的数据存入数据库,在用户对数据进行插入、修改、删除等操作时,MySQL提供了一种机制来检查数据库中的数据是否满足规定的条件,以保证数据库中数据的准确性和一致性,这种机制就是完整性约束。
2、什么是外键约束?
外键约束(FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。
3、什么是外键?
外键是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须具有主键约束或者唯一约束
4、什么是父表?
被依赖的表我们通常称之为父表或者主表
5、什么是子表?
设置外键约束的表称为子表或者从表
例如:
举个例子:如果想要表示学生和班级的关系,首先要有学生表和班级表两张表,然后学生表中有个字段为stu_clazz(该字段表示学生所在的班级),而该字段的取值范围由班级表中的主键cla_no字段(该字段表示班级编号)的取值决定。那么班级表为主表,学生表为从表,且stu_clazz字段是学生表的外键。通过stu_clazz字段就建立了学生表和班级表的关系。
主表(父表):班级表 - 班级编号 - 主键
从表(子表):学生表 - 班级编号 - 外键
错误案例
6、先创建父表:班级表
create table t_class(cno int(4) primary key auto_increment,cname varchar(5) not null,room char(4)-- 插入数据
insert into t_class values(null,'c1','1001'),(null,'c2','1002'),(null,'c3','1003');
7、创建子表:学生表
create table t_student(sno int(6) primary key auto_increment,sname varchar(5) not null,classno int(4)
)
-- 插入数据
insert into t_student values (null,'张三',1),(null,'李四',1),(null,'王五',2);
需求1:
添加一个学生对应的班级编号为4
insert into t_student values(null,'curry',3);
运行结果:添加成功
需求1出现问题:因为你现在的外键约束,没用语法添加进去,现在只是逻辑上认为班级编号是外键,没有从语法上定义
解决办法:添加外键约束
注意:外键约束只有表级约束,没有列级约束:
正确案例
先创建父表;班级表
create table t_class(cno int(4) primary key auto_increment,cname varchar(5) not null,room char(4))
创建子表,学生表(创建表中添加外键约束)
create table t_student(sno int(6) primary key auto_increment,sname varchar(5) not null,classno int(4),constraint fk_stu_classno foreign key (classno) references t_class (cno)
)
或者创建子表,学生表(在创建表以后添加外键约束)
create table t_student(sno int(6) primary key auto_increment, sname varchar(5) not null, classno int(4)
);
-- 在创建表以后添加外键约束:
alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno)
删除表的时候,先删除主表,再删除从表
需求1:添加一个学生对应的班级编号为4
insert into t_student values(null,'curry',4);
报错信息:1452 - Cannot add or update a child row: a foreign key constraint fails (mytestdb
.t_student
, CONSTRAINT fk_stu_classno
FOREIGN KEY (classno
) REFERENCES t_class
(cno
))
需求2:删除学生表中学号为3的学生,可以删除成功,能删除成功的原因是子表中不存在该数据
delete from t_student where sno=3;
需求3:删除班级表中班级编号为3的信息
delete from t_class where cno=1;
报错信息:1451 - Cannot delete or update a parent row: a foreign key constraint fails (mytestdb
.t_student
, CONSTRAINT fk_stu_classno
FOREIGN KEY (classno
) REFERENCES t_class
(cno
))
MySQL—表的完整性约束(外键约束)(一)相关推荐
- MySQL表的非外键约束
MySQL表的非外键约束 /* 建立一张用来存储学生信息的表 字段包含学号.姓名.性别,年龄.入学日期.班级,email等信息 学号是主键 = 不能为空 +? 唯一 姓名不能为空 性别默认值是 ...
- MySQL多表操作的外键约束
目录 一.多表关系 一对一关系 一对多/多对一关系 多对多关系 二.外键约束 特点 创建外键约束 方式1-在创建表时设置外键约束 方式2-在创建表时设置外键约束 在外键约束下的操作 1.数据插入 2. ...
- mysql创建表时设置外键_mysql创建表时设置外键约束的方法
mysql创建表时设置外键约束的方法 发布时间:2020-06-17 15:54:11 来源:亿速云 阅读:312 作者:元一 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中, ...
- 使用MySQL数据库创建表时添加外键约束
/题目:创建表Book表,字段如下: bid整型,要求主键 bname学符型,要求设置唯一键,并非空 price浮点型,要求有默认值10 btypeId 类型编号,要求引用bookType表的id字段 ...
- mysql的常见的外键约束
一 mysql的常见的外键约束策略 设计外键时,mysql提供了4种外键关联策略 1.RESTRICT 限制(默认) 如果有外键关联了tb_class 的id,则tb_class 不能删除被关联的记 ...
- 修改表结构添加外键约束,默认外键名
2019独角兽企业重金招聘Python工程师标准>>> 修改表结构添加外键约束,默认外键名 alter table SUPPLIER_INFO add foreign key (CR ...
- mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)
在MySQL中删除一张表或一条数据的时候,出现 [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint f ...
- MySQL数据库基础(外键约束、添加索引)
文章目录 一.外键约束 1.外键概念 2.关联约束 3.添加与删除外键 4.集联删除 二.MySQL索引 1.创建唯一索引(三种方法) 2.索引查询 3.全文索引 4.联合索引 5.删除索引 一.外键 ...
- 【MYSQL】foreign key 外键约束(详解)
外键是关联不同表之间的一个联接,比如我们现在有两张表: 那么如何设置外键呢? mysql> create table class(classId int primary key auto_inc ...
- 在mysql中如何添加外键约束_如何在MySQL中设置外键约束
(1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...
最新文章
- apache 访问出现403 Forbidden
- The Linux Command Line读书笔记(二)
- 如何参与github上的开源项目?
- idea 这么还原debug_看源码,我为什么推荐IDEA ?
- HBuilder X全局文件搜索和文件字符搜索快捷键
- mysql 开启profiles_MySQL中show profiles的开启
- [网络安全自学篇] 三十一.文件上传之Upload-labs靶场及CTF题目01-10(四)
- 使用CXF与Spring集成实现RESTFul WebService
- 【LeetCode - 131】分割回文串(dp,dfs)
- 无需格式转换直接发布DWG图纸到Autodesk Infrastructure Map Server(AIMS) 2013
- 国家计算机科学进展,计算机科学技术学院部署科研工作推进及国家自然科学基金申报工作...
- vue-cli3出现Invalid Host header的解决方案
- 2013.10.28—2013.11.1周总结
- 惠普计算机图标不在桌面,我的电脑图标没了怎么办
- 监测-病毒篇(病毒的了解和认识)
- c语言病毒编写教程,来来来,教你一个用C语言写个小病毒
- 中继器有何作用?它的工作原理是什么?-道合顺大数据Infinigo
- thinkpad e450c 键盘拆解
- miui11可用的位置模拟器_MIUI11内测体验包
- 网页抓取软件Wget用法详解
热门文章
- @autowired注解原理_SpringBoot注解大全,收藏一波!!!
- 如何看懂发电机功率圆图
- mysql 1084_[LeetCode]1084. 销售分析III(Mysql,having+聚合函数)
- Py之scikiti -survival:scikiti -survival库的简介、安装、使用方法之详细攻略
- Matlab:成功解决Function definition are not permitted at the prompt or scripts
- Apache部署网页-Ubuntu16.04
- C语言实现常用数据结构——堆
- Effective java -- 2 对于所有对象都通用到方法
- OSX操作技巧:快速锁定系统(类似Windows+L)
- js代码收集(1)_隐藏div、table间隔样式设置