4 约束
数据类型
什么是数据:数字、小说、图片、音乐、视频
针对不同的数据展现形式,我们对数据进行了分类,数据类型。
- 数字类型:存放数字的,int
- 浮点型类型:存放数字,float,小数
- 字符串类型:存放一切字符varchar
- 二进制类型:存放特殊数据
- 日期类型:只能存放日期类型
4.1 定义
约束是在符合数据类型的情况下,对数据的限制。
主键约束:empno(int):1,2,3,4,1,2,3,4
4.2 分类
有七个,但是oracle严格意义上有七个,mysql严格意义上只有六个,但是我们通过一种手段让其实现七个。
- 非空约束:对一个列有要求,要求其不能为空值。
- 唯一约束:对一个列有要求,要求其值不能跟其他已经存在的值相同(注册邮箱,注册用户,手机号)
- 主键约束:当一列需要有非空约束,也需要有唯一约束的时候,我们直接使用主键约束就会同时满足非空和唯一(一个表的第一列)
- 默认值约束:对一个表的列设置一个值,如果在给表添加数据的时候,这个列你没有给值,就用设置的这个默认值
- 检查约束:对一个表的类的取值有规定:只能为什么或者什么(性别)
- 自增长:对一个表的列的值,自动在列历史最大值的基础上增加1(一般跟主键一起使用)
- 外键约束:一个表的取值,需要参考另外一个表的列的取值
4.3 非空约束
4.3.1 创建非空约束
-- 添加非空约束
-- 1)创建表的时候直接添加非空约束
-- create table tbname(...列 数据类型 not null,...);
-- 案例:创建一个班级表myclass(cid,cname,loc),其中cid添加非空约束
create table myclass(cid int not null,cname varchar(20),loc varchar(20))
-- 验证非空约束是否生效
select * from myclass;
insert into myclass(cid, cname, loc) values(1001, '测试班', '教室二');
insert into myclass(cname, cid, loc) values('测试班', 1001, '教室二');
insert into myclass values(1001, '测试班', '教室二');
insert into myclass(cname, loc) values('开发班', '教室三'); -- [Err] 1364 - Field 'cid' doesn't have a default value
insert into myclass(cid, cname, loc) values(null, '开发班', '教室三'); -- [Err] 1048 - Column 'cid' cannot be null
-- 练习:创建学生表mystuden(sid,sname,cid),其中sid添加非空约束
-- 2)创建表的时候没有添加,创建完表,又想添加
-- ALTER table tbname change old_列 new_列 数据类型 not null;
-- 准备工作:
drop table if EXISTS myclass; -- 如果存在这个表就删除这个表
-- 案例:创建一个班级表myclass(cid,cname,loc),没有非空约束
create table myclass(cid int,cname varchar(20),loc varchar(20));
-- 给表中的cid列添加非空约束
ALTER table myclass change cid cid int not null; -- alter修改表
-- 验证非空约束
insert into myclass values(1001, '测试班', '教室二'); -- 添加一条正常数据,证明表是ok
insert into myclass(cname, loc) values('开发班', '教室三'); -- [Err] 1364 - Field 'cid' doesn't have a default value
insert into myclass(cid, cname, loc) values(null, '开发班', '教室三') -- [Err] 1048 - Column 'cid' cannot be null
4.3.2 删除非空约束
-- 删除非空约束
-- alter table tbname change old_列 new_列 数据类型 null;
-- 案例:删除myclass中的cid上的非空约束
alter table myclass change cid cid int null;
-- 验证约束是否删除成功
insert into myclass(cname, loc) values('开发班', '教室三'); -- 应该成功
insert into myclass(cid, cname, loc) values(null, '测试班', '教室4') -- 应该成功
select * from myclass;
-- 练习:针对mystudent表(sid,sname, cid),先创建表,然后添加sid的非空约束,然后删除约束并给出响应的验证
4.4 唯一性约束
4.4.1 创建唯一约束
# 2.唯一约束
# 作用:确保一张表中的一个列的取值没有重复的,确保唯一性
# 场景:一般用户名、手机号
# 1)添加唯一约束
-- 创建表的同时添加唯一约束
-- create table tbname (...,列名 数据类型 unique,...); 如果添加的时候没有给约束设置名字默认约束名为列名
-- 准备工作:
drop table if EXISTS myclass;
-- 案例:创建表myclass(cid,cname,loc),其中cid添加唯一约束
create table myclass(
cid int unique,
cname varchar(20),
loc varchar(20)
);
-- 验证唯一约束是否成功
insert into myclass values(1001,'测试班','教室二');
insert into myclass values(1001,&#