一分钟了解CONSTRAINT约束的用法

场景

设计数据库表,用来存储学生和班级信息表

第一种情况:

将学生信息和班级信息存储到一张表中

sno     sname      classno      cname
1       周杰伦         001        高三12       林俊杰        002         高三13       詹姆斯        003         高三2

这种情况会造成数据冗余问题,比如cname字段的数据重复太多,这时候稍微有经验点的就会讲学生信息和班级信息分开成两张表进行存储。

第二种情况:

学生表(添加单一外键)

sno(pk)     sname       classno(fk)
1           周杰伦        001
2           林俊杰        002
3           詹姆斯        003

班级表

cno(pk)     cname
100         高三1200         高三2

为了保证学生表中的classno字段中的数据必须来自于班级表中的cno字段中的数据,有必要给学生表中的classno字段添加外键约束

mysql> drop table if exists t_student;
mysql> drop table if exists t_class;

mysql> create table t_class(
    -> cno int(10) primary key,
    -> cname varchar(128) not null unique
    -> );

mysql> create table t_student(
    -> sno int(10) primary key auto_increment,
    -> sname varchar(32) not null,
    -> classno int(3),
    -> foreign key(classno) references t_class(cno)
    -> );

外键CONSTRAINT的注意点:

  1. 外键值可以为NULL
  2. 外键字段去引用一张表的某个字段的时候,被引用的字段必须有unique约束
  3. 使用外键后,两张表分为父子表:班级表(父表),学生表(子表)
  4. 创建先创建父表
  5. 删除先删除子表数据
  6. 插入先插入父表数据

例子:


# 父表中的deptId,为被引用的字段
CREATE TABLE employ(id INT PRIMARY KEY,ename VARCHAR(20),deptId INT);

# 子表使用CONSTRAINT 进行对父表deptId的引用
CREATE TABLE employ(id INT PRIMARY KEY,ename VARCHAR(20),deptId INT,
CONSTRAINT employ_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id));

CREATE TABLE employ(id INT PRIMARY KEY,ename VARCHAR(20),deptId INT, CONSTRAINT employ_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id));


个人网站:http://xudailong.cc

关注「蛇崽网盘教程资源」公众号 ,在微信后台回复「领取资源」,获取IT资源200G干货大全。

更多资源请访问:

https://blog.youkuaiyun.com/xudailong_blog/article/details/78762262

关注「蛇崽网盘教程资源」公众号 ,在微信后台回复「领取资源」,获取IT资源200G干货大全。

在微信后台回复「130个小程序」,即可免费领取享有导入就能跑的微信小程序

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值