数据库7大约束

4 约束

数据类型

什么是数据:数字、小说、图片、音乐、视频

针对不同的数据展现形式,我们对数据进行了分类,数据类型。

  • 数字类型:存放数字的,int
  • 浮点型类型:存放数字,float,小数
  • 字符串类型:存放一切字符varchar
  • 二进制类型:存放特殊数据
  • 日期类型:只能存放日期类型
4.1 定义

约束是在符合数据类型的情况下,对数据的限制。

主键约束:empno(int):1,2,3,4,1,2,3,4

4.2 分类

有七个,但是oracle严格意义上有七个,mysql严格意义上只有六个,但是我们通过一种手段让其实现七个。

  • 非空约束:对一个列有要求,要求其不能为空值。
  • 唯一约束:对一个列有要求,要求其值不能跟其他已经存在的值相同(注册邮箱,注册用户,手机号)
  • 主键约束:当一列需要有非空约束,也需要有唯一约束的时候,我们直接使用主键约束就会同时满足非空和唯一(一个表的第一列)
  • 默认值约束:对一个表的列设置一个值,如果在给表添加数据的时候,这个列你没有给值,就用设置的这个默认值
  • 检查约束:对一个表的类的取值有规定:只能为什么或者什么(性别)
  • 自增长:对一个表的列的值,自动在列历史最大值的基础上增加1(一般跟主键一起使用)
  • 外键约束:一个表的取值,需要参考另外一个表的列的取值
4.3 非空约束

image-20211206120831430

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 唯一性约束

image-20211206121128728

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,&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值