约束与default
- 约束
- primary key(主键特点是不可以为空,不可以重复)
- unique(可以为空,不可以重复,但空值可以重复)
- not null
- auto_increment
- default
约束
MySQL数据库通过约束(constraints)防止无效的数据进入到表中,以保护数据的实体完整性。
约束分为字段级别约束和表级别约束:
- 字段级约束:只为单个字段添加约束;
- 表级约束:为一个或多个字段添加约束
primary key(主键特点是不可以为空,不可以重复)
#创建一个表
create table user(
id char(17) primary key comment '主键',
user_name varchar(17) unique comment '用户名'
)
#添加信息
insert into user(id,user_name) values (null,'444') #出错,因为主键不能为空
输出结果为
#再添加如下信息
insert into user(id,user_name) values ('null','222')
insert into user(id,user_name) values ('','333') #可以添加成功,与第一条语句中的null有差别
输出结果为
#再添加如下数据
insert into user(id,user_name) values ('null','666') #主键值为null值,表中已经存在一个,所以不可以重复
unique(可以为空,不可以重复,但空值可以重复)
#创建一个字段与上表相同的表,添加如下信息
insert into user(id,user_name) values ('666','666') #该数据添加成功
insert into user(id,user_name) values ('777','666') #添加不成功,错误提示如下,因为设置了unique约束,不能重复
错误提示为
#再添加如下信息,均可以添加成功,为空时可以重复
insert into user(id,user_name) values ('888',null)
insert into user(id,user_name) values ('999',null)
insert into user(id,user_name) values ('000',null)
表示中数据为
not null
# 首先创建一个表
create table user_info(
id char(36) primary key comment '主键',
user_name varchar(17) unique comment '用户名',
password varchar(15) not null comment '密码'
)
# 添加信息
insert into user_info(id,user_name,password) values ('1111','1111','') #添加的是空字符(有字符),不为空,可以添加。
insert into user_info(id,user_name,password) values ('3333','3333333','null') #添加的是null字符,添加成功。
insert into user_info(id,user_name,password) values ('5555','5555',null) #设置为空(没有字符)时出错,由于限制了not null所以不能是null
错误提示为
添加完成后的表中结果为
auto_increment
#先创建一个表
create table publisher(
id int(17) primary key auto_increment comment '主键',
user_name varchar(17) comment '用户名'
)
#添加信息
insert into publisher (user_name) values ('出版社') #添加时,id根据前一个id值自动增长,添加4次后表中结果为
#只有四条信息时,可以自己添加第五条数据的id
insert into publisher (id,user_name) values ('7','教育出版社') #运行结果如下
#再次添加两次该条数据,从上一个id值开始自增
insert into publisher (user_name) values ('教育出版社')
default
#先创建一个表
create table user(
id int(17) primary key comment '主键',
user_name varchar(17) unique comment '用户名',
password varchar(15) comment '密码',
sex char(2) default 0 comment '性别'
)
#添加如下数据,不设置性别
insert into user (id,user_name,password) values ('3333','3333333','188')
运行结果为 (性别添加了默认值,所以会有默认为0)
#可以将默认值设置为0或者1
insert into user (id,user_name,password,sex) values ('111','111','188',0)
insert into user (id,user_name,password,sex) values ('222','222','188',1)