MySQL快速入门篇---数据库约束
一、什么是数据库约束
数据库约束是指对数据库中的数据所施加的规则或条件,用于确保数据的准确性和可靠性。
二、约束类型
约束可分为NOT NULL非空约束、DEFAULT默认约束、UNIQUE唯一约束、PRIMARY KEY主键约束、FOREIGN KEY外键约束、CHECK约束六种。
每一种的作用都各不相同。
三、NOT NULL(非空约束)
定义表时某列不允许为NULL时,可以添加非空约束。
比如创建一个员工表,员工名为NULL时,这条记录是不完整的:
create table workers(id bigint comment '员工编号',name varchar(20) comment '员工姓名'
);
insert into workers values (1,null);
select * from workers;
查询结果如下所示:
此时我们就需要约束员工姓名的列不能为NULL:
drop table if exists workers;
create table workers(id bigint comment '员工编号',name varchar(20) not null comment '员工姓名'
);
此时我们再插入先前的数据:
insert into workers values (1,null);
运行后我们发现它报错了:
此时我们再插入正常值,发现可以成功插入:
然后我们查看表结构发现结构如下所示:
此时Null列id为YES,name为NO,这表示id列的值可以为null,而name列的值不能为null。
四、DEFAULT(默认值约束)
DEFAULT约束用于在列中指定默认值,如果一个列中没有设置值,那么便会将默认值设置到该列
更改员工表,在员工表中新增年龄列
drop table if exists workers;
create table workers(id bigint comment '员工编号',name varchar(20) not null comment '员工姓名',age int comment '年龄'
);
插入一条数据,不指定年龄,此时年龄列的值为null
更改员工表,为年龄加入默认值约束20
drop table if exists workers;
create table workers(id bigint comment '员工编号',name varchar(20) not null comment '员工姓名',age int default 20 comment '年龄'
);
插入一条数据,不指定年龄时使用了默认值
查看表结构,年龄列默认值为20
五、UNIQUE(唯一约束)
指定了唯一约束的列,该列的值在所有记录中不能重复
,例如员工的编号,学生的学号等等。
更改员工表,新增工号列
drop table if exists workers;
create table workers(id bigint comment '员工编号',name varchar(20) not null comment '员工姓名',age int default 20 comment '年龄',sno varchar(10) comment '工号'
);
不设置唯一约束时,工号可重复
更改员工表,为工号设置唯一约束
drop table if exists workers;
create table workers(id bigint comment '员工编号',name varchar(20) not null comment '员工姓名',age int default 20 comment '年龄',sno varchar(10) unique comment '工号'
);
插入重复的工号,发现报错,唯一约束生效
查看表结构,UNI表示唯一约束
六、PRIMARY KEY(主键约束)
(1)主键约束唯一标识数据库中的每条记录
(2)主键必须包含唯一的值,且该值不为NULL
(3)每个表只能有一个主键,主键可以由单个列或多个列组成
(4)建议为每个表都设置一个主键
更改员工表,为id列添加主键
drop table if exists workers;
create table workers(id bigint primary key comment '员工编号',name varchar(20) not null comment '员工姓名',age int default 20 comment '年龄',sno varchar(10) unique comment '工号'
);
注意:主键同时拥有非空约束和唯一约束的特性
查看表结构,PRI代表主键约束
可为主键设置自动增长
drop table if exists workers;
create table workers(id bigint primary key auto_increment comment '员工编号',name varchar(20) not null comment '员工姓名',age int default 20 comment '年龄',sno varchar(10) unique comment '工号'
);
插入数据时不指定主键列的值,其会自动生成
查看表结构,Extra列显示auto_increment
复合主键:以多个列共同组成的主键
(1)更改员工表,设置id和name为复合主键
drop table if exists workers;
create table workers(id bigint,name varchar(20),primary key(id,name)
);
(2)插入两条id不同,名字都为张三的数据
这里能够正常插入是因为主键由id和name共同组成,有一个不一样就行
七、FOREIGN KEY(外键约束)
(1)外键用于定义主表和从表之间的关系
(2)外键约束定义在从表的列上,主表关联的列必须是主键或唯一约束
(3)当定义外键后,要求从表中的外键列数据必须在主表的主键或唯一列存在或者为null
具体实例如下所示:
创建班级表,并插入数据
drop table if exists class;
create table class(id bigint primary key auto_increment,name varchar(10) not null
);
insert into class values(1,'数学1班'),(2,'数学2班'),(3,'物理1班'),(4,'化学2班');
select * from class;
创建学生表,加入外键约束
drop table if exists student;
create table student(id bigint primary key auto_increment,name varchar(10) not null,age int default 18,class_id bigint,foreign key (class_id) references class(id)
);
查看学生表结构,发现Key列的值为MUL,表示外键约束
正常插入数据
插入班级号为6的学生,由于主表中没有这个班级,插入失败
插入班级id为NULL的记录,可以成功,表示当前学生还未分配班级
删除主表某记录时,从表中不能有对该记录的引用
注意:删除主表时要先删除从表
八、CHECK约束
CHECK 约束可以应用于一个或多个列,用于限制列中可接受的数据值,从而确保数据的完整性和准确性
创建一个小说表,其中售价不得高于30,并插入一条数据售价大于30
我们发现它报错了,这就是check起了作用
本篇内容到这里就结束了,感谢各位看官观看,如果觉得本篇内容对你有用,可以一键三连支持一下哦