约束分为字段级别约束和表级别约束:
字段级约束:只为单个字段添加约束; 表级约束:为一个或多个字段添加约束
primary key(不重复且不为null),not null,unique(不重复但是可以有多个null),auto_incremenrt,foreign key(name)reference table_ame(name)等
创建一个数据库表
create table user_info(
id char(36) primary key comment'主键',
user_name varchar(30) unique comment'唯一的',
password varchar(30) not null
)
primary key
指定主键。该约束强制字段或字段组合必须具有唯一性且每个字段不能为空。可以为字段级别约束,也可以为表级别约束。
insert into user_info(id,user_name,password) values ('00023000-027a-42b8-8a76-ce03d411bd5d','000','000');
当添加的数据的id和数据库中的一致,则会报错,行使了主键的作用:
insert into user_info(id,user_name,password) values ('00023000-027a-42b8-8a76-ce03d411bd5d','001','001');
当添加的数据的id为空字符串能添加成功:
insert into user_info(id,user_name,password) values ('','111','001');
当添加的数据的id为空null,则会报错,行使了主键的作用:
insert into user_info(id,user_name,password) values (null,'006','001');
not null
指定字段不能为空,只能定义为字段级约束;
insert into user_info(id,user_name,password) values ('66623000-027a-42b8-8a76-ce03d411bd5d','666',''); insert into user_info(id,user_name,password) values ('06623000-027a-42b8-8a76-ce03d411bd5d','888','888');
这两条的password都不属于空,可以添加成功到数据库中,而下面的则不行:
insert into user_info(id,user_name,password) values ('47823001-027a-42b8-8a76-ce03d411bd5f','222',null);
unique
指定字段的值(或字段组合的值)对于表中所有的行必须是唯一的。对于无非空约束的字段,唯一键约束允许输入空值,且包含空值的行可以有多个。可以为字段级别约束,也可以为表级别约束,表级约束时可以定义复合唯一键。
添加两条数据,user_name的值都是999,会报错,unique行使了作用
insert into user_info(id,user_name,password) values ('06623000-027a-42b8-8a76-ce04d411bd5d','999','888'); insert into user_info(id,user_name,password) values ('11623000-027a-42b8-8a76-c114d411bd5d','999','000');
添加两条数据,user_name的值都是空字符串,会报错,unique行使了作用
insert into user_info(id,user_name,password) values ('06623000-027a-42b8-8111-ce04d411bd5d','','888'); insert into user_info(id,user_name,password) values ('11623000-027a-42b8-8a76-c114d411bd5d','','000');
包含空值的行可以有多个 ,user_name的值都是空null,正常执行
insert into user_info(id,user_name,password) values ('06623000-027a-42b8-8111-ce04d411175d',null,'111'); insert into user_info(id,user_name,password) values ('11623000-027a-42b8-8a76-c1122411bd5d',null,'111');
default
设置默认值
将下列数据库表中的性别sex列中设置默认值为0
create table user( id char(36) primary key comment '主键', user_name varchar(17) unique comment '用户名', password varchar(15) comment '密码', sex char(2) default 0 comment '性别' )
当 添加数据时没有添加sex列的值时,但由于有默认值则数据库中的sex列中有默认值数据,如果没有默认值添加相同的语句则sex列为null
insert into user_m(id,user_name,password) values ('00023000-027a-42b8-8a76-ce03d411bd5d','000','000');
check
指定列值必须满足check中条件,否则无法进行添加或修改;一个字段可以定义多个check约束。注意:MySQL数据库不支持该约束!