基础-约束

一.约束-概述

1.概念:

约束是作用于表中字段上的规则,用于限制存储在表中的数据。

2.目的:

保证数据库中数据的正确性,有效性和完整性。

3.分类:

约束

描述

关键字

非空约束

限制该字段的数据不能为null

not null

唯一约束

保证该字段的所有数据都是唯一的,不重复的

unique

主键约束

主键是一行数据的唯一标识,要求非空且唯一

primary key

默认约束

保存数据时,如果未指定该字段的值,则采用默认值

default

检查约束

保证字段值满足一个条件

check

外键约束

用来让两张表的数据之间建立连接,保证数据的一致性和完整性

foreign key

二.约束-约束演示

//创建一张user用户表
create table user(
    id integer primary key auto_increment comment '主键',
    name varchar(20) not null unique comment '姓名',
    age int check(age > 0 && age <= 120) comment '年龄',
    status char(1) default '1' comment '状态',
    gender char(1) comment '性别'
) comment '用户表';

insert into user (name,age,status,gender) values
                                              ('Tom1',19,'1','男'),
                                              ('Tom2',21,'0','男');
                                              
//name字段值重复,会报错
insert into user (name,age,status,gender) values
                                              ('Tom1',13,'1','男'),

//插入一条数据没有status字段,会自动设置该字段值为1
insert into user (name,age,gender) values
                                              ('Tom5',80,'男');

三.约束-外键约束

1.语法

//添加外键
create table 表名(
    字段名 字段类型,
    ...
    [constraint] [外键名称] foreign key (外键字段名) references 主表(主列表名)
);

alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主列表名);

//删除外键
alter table 表名 drop foreign key 外键名称;

四.约束-外键删除更新行为

1.删除/更新行为

行为

说明

no action

当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则不允许删除/更新。(与restrict一致)

restrict

当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则不允许删除/更新。(与no action一致)

cascade

当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有,则也允许删除/更新外键在子表中的记录。

set null

当在父表中删除对应记录时,首先检查该记录是否有对应的外键,如果有则设置子表中该外键值为null。(这就要求该外键允许取null)

set default

父表有变更时,子表将外键列设置成一个默认的值。(Innodb不支持)

alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主列表名) 
    on update cascade on delete cascade;