十、外键约束FK(foreign key)
1.定义
a.外键涉及到的术语:外键约束、外键字段、外键值。
b.外键约束、外键字段、外键值三者之间的关系?
答:给某个字段添加外键约束之后,该字段称为外键字段,外键字段中的值是外键值。
c.外键根据个数分为:单一外键、复合外键
1>【单一外键】:给一个字段添加外键约束
2>【复合外键】:给多个字段联合添加一个外键
d.在同一张表中可以有多个外键存在
2.实例
有两张表,分别是学生表 t_student 和班级表 t_class,以 t_student 表的 classno为外键
drop table if exists t_student;
create table t_student(
sno int(4) primary key auto_increment,
sname varchar(32),
classno int(4),
constraint t_student_classno_fk foreign key(classno) references t_class(cno)
); create table t_class(
cno int(4) primary key,
cname varchar(32)
);
sql数据文本
insert into t_class(cno,cname) values(100,'高三一班');
insert into t_class(cno,cname) values(200,'高三二班');
insert into t_class(cno,cname) values(300,'高三三班');
insert into t_student(sname,classno) values('张三',100);
insert into t_student(sname,classno) values('李四',100);
insert into t_student(sname,classno) values('王五',400);
请注意以下三点:
1.外键字段可以为null,外键为空的数据也叫孤儿数据;
2.被引用的字段必须具有unique约束;(就是references后面的字段)
3.加入外键约束后,表分为父表和子表,以上父表是 t_class;子表是 t_student;
创建表时先创建父表,再删除子表;插入数据时,先插入父表数据,再插入子表数据。
总结:在一对多的关系中,多的一方可以添加外键(子表),少的一方是引用(父表)。
a.删除外键约束
语法:alter table 表名 drop foreign key 外键约束名;

3.级联更新和级联删除
用法:在添加级联更新和级联删除的时候,需要在外键约束后面添加关键字;
注意:级联更新和级联删除要谨慎使用,因为级联操作会将数据改变或者删除【数据无价】。
a.级联删除:on delete cascade
定义:在删除父表数据时,级联删除子表中的数据

b.级联更新:on update cascade
定义:在更新父表数据时,级联更新子表中的数据

十、外键约束FK(foreign key)的更多相关文章
- 外键约束:foreign key
*外键 foreign key* 1.概念:如果一个实体的(student)的某个字段,指向(引用)另个实体(class)的主键 (class:class_id),就称为student实体的class ...
- Constraint6:更新外键约束(Foreign Key Constraint)的引用列
在SQL Server中,表之间存在引用关系,引用关系通过创建外键约束(Foreign Key Constraint)实现.如果一个Table中的column被其他Table引用,那么该表是参考表,或 ...
- Oracle开发 之 主-外键约束FK及约束的修改
试验环境: 1)数据库版本:oracle 11.2.0.4 2)建表脚本:以scott的dept及emp表为基础. 父表:dept -- Create table create table DEPT ...
- SQL的主键和外键约束(转)
SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...
- SQL 主键和外键约束
SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...
- [转]SQL的主键和外键约束
SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...
- MySQL数据库有外键约束时使用truncate命令的办法
MySQL数据库操作中,Delete与Truncate两个命令都可以删除一个数据表中的全部数据,使用办法分别是: DELETE FROM t_question TRUNCATE TABLE t_que ...
- SQL中创建外键约束
alter table 表名 add constraint 外键约束名 foreign key(列名) references 引用外键表(列名)
- SQL外键约束
1.查询表已有的外键 select name from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o ...
随机推荐
- Android 适配器教程 (六)
我们的适配器学习已经接近尾声了.尽管这不是一个大问题,可是确实是值得学习的一块知识,回忆一下之前五讲的知识.我们已经学到了非常多东西了. 在之前五讲中.我们已经由浅入深的认识了适配器,从最简单的Lis ...
- 没有IP地址的主机怎样保持IP层联通
在<两台不同网段的PC直连能否够相互ping通>一文中,我有点像在玩旁门左道,本文中.我继续走火入魔.两台机器,M1和M2,各自有一个网卡eth0,配置例如以下:M1的配置:eth0上不配 ...
- leetCode(40):Path Sum
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- 转载---- 使用opencv源码自己编制android so库的过程
http://blog.csdn.net/lantishua/article/details/21182965 工作需要,在Android上使用OpenCV.opencv当前的版本(2.4.8)已经有 ...
- 宜人贷蜂巢ELK Stack之elasticsearch权限探索
前言 上文<宜人贷蜂巢API网关技术解密之Netty使用实践>提到了,API网关“承外对内”,将外部请求,转发到内部各个抓取服务.在网关中,不仅可以做鉴权.加解密.路由.限流功能:如果想了 ...
- 如何学习Java?
一点感悟 java作为一门编程语言,在各类编程语言中作为弄潮儿始终排在前三的位置,这充分肯定了java语言的魅力,在实际项目应用中,我们已经无法脱离javaa(Ps当然你可以选择不使用),但它的高性能 ...
- C语言malloc
在子函数里面动态申请的内存不会自动被系统收回的,因为这些空间在堆里面,而不是栈,平常所说的不能返回指向栈的指针,比如在子函数里面定义一个字符指针,指向常量"hello"因为函数调用 ...
- 前端基础——CSS盒子模型
如今很多网页都是由很多个"盒子"拼接.嵌套而成,所以多少接触过网页设计的朋友一定都对CSS盒子模型有所了解. 为了更好的说明,先举个通俗的样例:在一个仓库中放了10个纸箱,每一个纸 ...
- react面试宝典
调用 setState 之后发生了什么? 在代码中调用setState函数之后,React 会将传入的参数对象与组件当前的状态合并,然后触发所谓的调和过程(Reconciliation).经过调和过程 ...
- 新版的Spring4X怎样下载
点击下载 <a href="http://download.csdn.net/detail/zhaoqingkaitt/7733719">点击免费下载</a> ...