1.1 约束概述
限制加入表中的数据的类型
create table 加约束 | alter table 加约束
1.2 约束的作用
保证数据的正确性,有效性和完善性
1.3约束分类
主键 primary key
唯一 unique
非空 not null
默认值 default
外键 foreign key
检查约束 check
2.1主键约束
都说主键自增长 啊 这两个是不一样的 ,主键是主键 增长是增长;
先说主键
特点
唯一 ,不重复,主索引,不为空 null
格式:
create table 表名 (
字段名 字段类型 primary key , ....
)
添加 alter table 表名 add primary key (字段名) # 增加
删除 alter table 表名 drop primary key # 直接 给我删除
一定要注意哦!
非空 not null 唯一性
在设计表的时候通常 会单独 设计一下 id 字段 为主键
2.2 自增 主键
create table 表名(
字段名字 字段类型 primary key auto_increment
.....
) #主键 加 自增
2.2.1
修改主键自增的起始值
格式 1:
alter table 表名 auto_increment = 起始值;
不能小于当前的自增值
格式2:
创建表
create table 表名(
字段名 类型 primary key auto_increment
)auto_increment = 起始值;
delete 删除后,自增长是从最后一条记录开始的
truncate 删除后,自增长字段从1开始的;
3. 唯一约束
不允许出现重复记录
create table 表名(
字段名 类型 unique
....
)
注意:
null 表示 是没有数据 ,所以不存在重复问题
1.非空约束
不可为空
格式:
create table 表名 (
字段 字段类型 not null
)
字段设置了唯一和不为null与主键区别?
表中只能有一个主键
自增长只能在主键上
唯一和不为空null可以设置任何字段
2.默认值
格式
create table 表名 (
字段 类型 default #默认值
)
注意:
插入数据时,可以考虑使用default 默认值关键字
3.外键约束******
3.1数据冗余
数据重复出现,同一数据存储在不同的数据主键
解决冗余:分表
出现员工表 加入员工 没有部门
外键约束 解决方法
3.2外键约束
主表(父表):补外键约束引用的字段,必须有唯一性
子表:定义外键约束表,外键取值受主键取值约束,要么取null
格式
create table 表名(
id int
age int
...
[ constraint][外键约束名称] foreign key (外键字段名) references 主表名称 (主键字段名)
)
[] : 表示可写 可不写
alter table 表名 add [constraint][外键约束名称] foreign key (外键字段名) references 主表名称 (主键字段名)
删除 外键约束
alter table 表名 drop foreign key 外键约束名称
---- 级联操作
主表与子表的关系,外键约束 ,才会考虑级联
解决问题:
主表的主键改变 子表的外键改变是否跟着改变?
1.1操作(外键约束)
删除主表中的所有记录,必须要把子表中的记录清楚
修改主表中的记录时 ,必须要把子表中的记录修改
子表在增加记录时外键不能是主表中当前没有主键
1.2 级联 分类
(经常习惯性要去改变主表信息)想级联必有外键约束 #必须建表时才可以创建
级联更新 on update cascade
级联删除 on delete cascade
级联创建表:
create table stu(
sid int primary key auto_increment,
sname varchar(20) ,
ssex varchar(2),
stell varchar(11),
sdate date ,
srmark varchar(30),
scid int ,
constraint stu_calsses_fk foreign key(scid) references calss(cid) on update cascade on delete cascade
)
级联删除:update calsses set cid = 3 where cid = 2;
级联修改:delete from class where cid = 3;
2 检查约束
某字段的值必须满足布尔表达式
2.1行级添加
格式:create table 表名(
check (表达式)
字段名 类型 check(表达式)
字段名 类型 constraint 唯一约束名 check (表达式) [not enforced] #[]可有 可无
)
create table stu(
phone varchar(11) check (length(phone) = 11) #长度 小于11 大于11 不可存储
)
2.2 表示添加
create table 表名 (
字段名 类型
...
constraint 唯一约束名 check(表达式)[ not enforced]
)
2.3 表后添加
alter table 表名 add constraint 唯一约束名 check(表达式)
2.4 检查约束删除
alter table 表名 drop check 检查约束名