MySQL:数据库的约束
约束类型
- NOT NULL - 指示某列不能存储 NULL 值。
- UNIQUE - 保证某列的每行必须有唯一的值。
- DEFAULT - 规定没有给列赋值时的默认值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。
1. NOT NULL
指示某列不能存储 NULL 值
注:如果没有指定非空时,当前列是可以填入非空的,在把某一列定义为一个必填项,就可以使用not null来定义。
此时的id几句成为了一个必填项,null设置为NO
此时的id就不能为null,否则就会报错
满足条件设置成功
create table student(
-> id bigint not null,
-> name varchar(10)
-> );
desc student;
insert into student values (null,'shangsan');
insert into student values (123456,'shangsan');
select * from student;
2. UNIQUE
保证某列的每行必须有唯一的值(某列的值在整个表中不能有重复)
如果插入id相同的,则不满足唯一的条件,则会报错
这次插入id不唯一,就可以成功的插入了
create table student1(
-> id bigint unique,
-> name varchar(20)
-> );
desc student1;
insert into student1 values (123,'zhangsan'),(123,'lisi');
insert into student1 values (123,'zhangsan'),(456,'lisi');
select * from student1;
3. DEFAULT
规定没有给列赋值时的默认值(将值为空的设置为默认值)
随机的插入一个id,但是不给name赋值,则name会自定赋值成已经定义的 ‘无名氏’
注:如果我们手动置为null,则显示的值必然是我们手动置成的null
create table student2(
-> id bigint,
-> name varchar(20) default'无名氏'
-> );
desc student2;
insert into student2 (id) values (1);
select * from student2;
insert into student2 (name) values (null);
4.PRIMARY KEY
NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 (主键的列即时非空又是唯一的)
注:id指定为非空并且唯一,列就会被标识为primary 表示它是一个主键
create table student3(
-> id bigint not null unique,
-> name varchar(20) default'无名氏'
-> );
desc student3;
一个表不能有多个主键
create table student5(
-> id int primary key,
-> na int primary key
-> );
但一个主键可以包括多个列(复合主键)
其中有一个不同是可以插入的,但如果全部都不同的话,则无法插入
create table student6(
-> id int ,
-> na int,
-> primary key(id,na)
-> );
自增类型(auto increment)
表示在表上一条的基础上加1(在插入时,先找到最大值,然后再最大值的基础上+1,作为一个新的值,作为新的数据行的值)
当插入一个id为空的列,它会按照id的最大值自动生成一个+1的值
create table student4(
-> id bigint primary key auto_increment,
-> name varchar(10)
-> );
desc syudent4;
insert into student4 (id) values (1);
insert into student4 (name) values ('zhangsan');
select * from student4;
5.FOREIGN KEY
保证一个表中的数据匹配另一个表中的值的参照完整性。
创建外键的语法:foreign key (字段名) references 主表(列)
看表(MUL说明存在外键关系)
写入正确的数据可以读入
写入不存在的数,则会报错
注;如果要删除一个主表中的数,要先删除子表中的数据,因为子表对主表有依赖作用,只有先将子表中的对应的数据删除,才可以删除主表中的数据。
create table c(
-> id bigint primary key auto_increment,
-> name varchar(10)
-> );
create table n(
-> id bigint primary key auto_increment,
-> name varchar(20) not null,
-> c_id bigint,
-> foreign key (c_id) references c(id)
-> );
desc n;
6.CHECK
保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。
满足条件
不满足条件
create table check_gender(
-> id bigint,
-> gender varchar(1),
-> check(gender='男' or gender='女')
-> );
insert into check_gender values(1,'男');
insert into check_gender values(1,'1');//错误的
select * from check_gender;
希望能对大家有所帮助!!!!