约束
- 什么是约束?
约束:constraint
在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表中数据的
完整性、有效性!! - 约束包括哪些
- 非空约束:not null
- 唯一性约束:unique
- 主键约束:primary key(简称PK)
- 外键约束:foreign key(简称FK)
- 检查约束:check(mysql不支持,oracle支持)
- 我们这里重点学习四个约束:
not null
unique
primary key
foreign key
- 非空约束:not null
非空约束not null约束的字段不能为NULL
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255) not null // not null只有列级约束,没有表级约束!
);
insert into t_vip(id,name) values(1,'zhangsan');
insert into t_vip(id,name) values(2,'lisi'); - 小插曲:
xxxx.sql这种文件被称为sql脚本文件。
sql脚本文件中编写了大量的sql语句。
我们执行sql脚本文件的时候,该文件中所有的sql语句会全部执行!
批量的执行SQL语句,可以使用sql脚本文件。
在mysql当中怎么执行sql脚本呢?
source 拖进来(直接执行sql脚本文件)
你在实际的工作中,第一天到了公司,项目经理会给你一个xxx.sql文件,
你执行这个脚本文件,你电脑上的数据库数据就有了! - 唯一性约束:unique
唯一性约束unique约束的字段不能重复,但是可以为NULL。
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255) unique,//列级约束
email varchar(255)
);
insert into t_vip(id,name,email) values(1,'zhangsan','zhangsan@123.com');
insert into t_vip(id,name,email) values(2,'lisi','lisi@123.com');
insert into t_vip(id,name,email) values(3,'wangwu','wangwu@123.com'); - 新需求:name和email两个字段联合起来具有唯一性
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255) ,
email varchar(255),
unique(name,email)//表级约束
);
insert into t_vip(id,name,email) values(1,'zhangsan','zhangsan@123.com');
insert into t_vip(id,name,email) values(2,'zhangsan','zhangsan@sina.com'); - 什么时候使用表级约束
需要给多个字段联合起来添加某一个约束的时候,需要使用表级约束
在mysql当中,如果一个字段同时被not null和unique约束的话
该字段自动变为主键字段(注意:oracle中不一样) - 主键约束primary key
- 主键约束的相关术语
主键约束:就是一种约束
主键字段:该字段上添加了主键约束
主键值:主键字段上的每一个值
- 主键约束的相关术语
- 什么是主键,有什么用?
主键值是每一行记录的唯一标识!!
任何一张表都应该有主键,没有主键,表无效
主键的特征:not null + unique(主键值不能是NULL,同时也不能重复!) - 主键值建议使用:
int
bigint
char等类型
不建议使用:varchar来做主键,主键值一般都是数字,一般都是定长的
在mysql中,有一种机制,可以帮助我们自动维护一个主键值
drop table if exists t_vip;
create table t_vip(
id int primary key auto_increment,//auto_increment表示自增,从1开始,以一递增
name varchar(255)
);
insert into t_vip(name) values('zhangsan');
insert into t_vip(name) values('zhangsan');
insert into t_vip(name) values('zhangsan');
insert into t_vip(name) values('zhangsan');
insert into t_vip(name) values('zhangsan');
insert into t_vip(name) values('zhangsan'); - 外键约束foreign key
- 外键约束涉及到的相关术语:
外键约束:一种约束
外键字段:该字段上添加了外键约束
外键值:外键字段当中的每一个值 - 业务背景:
请设计数据库表,来描述“班级和学生”的信息?
drop table if exists t_student;
drop table if exists t_class;
create table t_class(
classno int primary key,
classname varchar(255)
);
create table t_student(
no int primary key auto_increment,
name varchar(255),
cno int,
foreign key(cno) references t_class(classno)
);
insert into t_class(classno,classname) values (100,'北京市大兴区亦庄镇第二中学高三1班');
insert into t_class(classno,classname) values (101,'北京市大兴区亦庄镇第二中学高三2班');
insert into t_student(name,cno) values ('jack',100);
insert into t_student(name,cno) values ('lucy',100);
insert into t_student(name,cno) values ('lilei',100);
insert into t_student(name,cno) values ('hanmeimei',100);
insert into t_student(name,cno) values ('zhangsan',101);
insert into t_student(name,cno) values ('lisi',101);
insert into t_student(name,cno) values ('wangwu',101);
insert into t_student(name,cno) values ('zhaoliu',101);