约束
1、约束
约束,是指作用在表中字段上的规则,用于限制字段输入的数据,使得表格式统一,数据内容正确。同一个字段的约束可以有多个
约束包括:
非空约束,限制表中的值不为null:not null
唯一约束:同一个字段的值不重复:unique
主键约束:一行数据的唯一标识,非空且唯一:primary key
默认约束:若字段的值为空,则使用默认值:default
检查约束:保证字段值符合某一个条件:check(条件)
约束的语法为:字段名 字段类型 约束1 约束2……[comment]
create table cusinfo(
id int primary key auto_increment comment'序号',
name varchar(20) not null comment '姓名',
sex varchar(10) check(sex='男'||sex='女'||sex='未知') default '未知' comment '性别',
age int check (age>=0&&age<=120)comment '年龄',
birthday date check ( birthday <= '2025-6-27') comment '生日',
phone varchar(20) check(length(phone)=11) unique comment '电话',
address varchar(50) comment '地址'
)comment='用户信息表';
insert into cusinfo values(null,'张三','男',18,'1999-01-01','13888888888','北京'),
(null,'李四','女',19,'1998-01-01','13888888889','上海'),
(null,'王五','未知',20,'1997-01-01','13888888890','广州'),
(null,'赵六','男',21,'1996-01-01','13888888891','深圳'),
(null,'孙七','女',22,'1995-01-01','13888888892','杭州'),
(null,'周八','男',23,'1994-01-01','13888888893','西安'),
(null,'吴九','女',24,'1993-01-01','13888888894','武汉'),
(null,'郑十','男',25,'1992-01-01','13888888895','南京');
2、外键约束(不常用)
两张表在数据库层面建立连接的约束,使得两张表的完整与统一,外键连接最常用的方法是在子表中创建一个子id,然后去连接父表的主键
添加外键:在创建表格时添加:create table 表名(
字段名 数据类型 ,
……
[constraint] [外键名称] foreign key (外键字段名) reference 父表 父表字段名
创建表后在表中增加一个外键: alter table 表名 [add constraint fk_子表名_父表名] foreign key (父表名_外键字段名 )references 父表名 (父表字段名)
create table serinfo(
id int primary key comment'序号',
level varchar(10) comment'等级'
)comment '用户等级表';
insert into serinfo values(1,'普通会员'),(2,'高级会员'),(3,'VIP会员');
alter table cusinfo add column serinfo_id int comment '等级id';
update cusinfo set serinfo_id=1 where id=1;
update cusinfo set serinfo_id=2 where id=2;
update cusinfo set serinfo_id=1 where id=3;
update cusinfo set serinfo_id=3 where id=4;
update cusinfo set serinfo_id=2 where id=5;
update cusinfo set serinfo_id=3 where id=6;
update cusinfo set serinfo_id=1 where id=7;
update cusinfo set serinfo_id=3 where id=8;
update cusinfo set serinfo_id=2 where id=9;
alter table cusinfo add constraint fk_cusinfo_serinfo foreign key (serinfo_id) references serinfo(id);
删除外键
alter table 表名 drop foreign key 外键名称;
alter table cusinfo drop foreign key fk_cusinfo_serinfo;
外键的删除更新行为约束
在创建外键时可以语句后增加一个约束更新、删除的语法:alter table 表名 [add constraint fk_子表名_父表名] foreign key (父表名_外键字段名 )references 父表名 (父表字段名)on update 行为 on delete 行为
外键的更新/删除行为有:
当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新:no action #默认存在
当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新:
restrict #默认存在,与no action一致
将父表与子表级联:当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录:cascadeas
当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null: set null
alter table cusinfo add constraint fk_cusinfo_serinfo foreign key (serinfo_id) references serinfo(id) on delete cascade on update cascade;
alter table cusinfo add constraint fk_cusinfo_serinfo foreign key (serinfo_id) references serinfo(id) on delete set null;