约束包括五种:
*)所有的约束都存在information_schema数据库的table_constraints表中
主键约束:
对一行的数据的唯一标识。
*)不能重复;
*)不能为空null
*)尽量使用业务无关数据作为主键(如:连续自增整数auto_increment、随机字符串uuid)
*)主键自动添加索引
*)建表时添加主键例子:
create table tb_test(
id bigint primary key auto_increment,
name varchar(50)
);
*)建表后修改主键例子:
alter table tb_test add primary key(id) auto_increment;
*)删除主键例子
alter talbe tb_test drop primary key;
*)auto_increment
a、查看下一个自增值:show create table tb_student;
b、如果手动指定了一个自增值,下一个自增值会插入一个更大值,不会回退更小的值
c、只有主键才能自增;
d、如果要取消带自增的主键约束,则必须先修改取消自增属性,再取消主键约束。
例如:alter table tb_test modify id bigint; -- 取消了自增属性
alter table tb_test drop primary key; -- 取消主键约束
*)双主键
create table tb_test2(
id bigint,
name varcha(50),
title varchar(100),
primary key(id, name)
);
说明:将id和name组合起来作为主键。不推荐使用双主键。
非空约束:
创建时非空约束例子:create table tb_test3(
id bigint not null,
name varcha(50) not null,
title varchar(100),
);
说明:在字段后增加not null即可。可以通过desc tb_test3;或者show create table tb_test3;查看非空约束的情况
增加&删除非空约束例子:
alter table tb_test3 modify name varchar(50) no null; -- 增加非空约束
alter table tb_test3 modify name varchar(50) null; -- 取消非空约束
唯一约束:
限制字段数据值不能重复,null值可以有多个。
*)创建表时添加唯一约束例子:
-- 单一唯一约束
create table tb_test(
id int,
name varchar(50) unique,
gander char(1)
);
-- 组合唯一约束
create table tb_test(
id int,
name varchar(50) ,
gander char(1),
unique key(name, gander)
);
*)增加唯一约束
alter table tb_test add unique key(name,gander); --如果对应字段已经有重复数据,则不能增加唯一约束
*)删除唯一约束
alter table tb_test drop index name; -- index后面跟的是唯一约束的约束名字。可以通过show create table tb_test;查看到唯一约束名字
外键约束:
外键一般引用另外一个主键中的值。在mysql中只有engine=innodb方式下才能支持,myisam方式下不支持。innodb效率比较低,一般不使用外键约束。
添加外键约束例子:
create table tb_tel(
id int,
stu_id int, -- 注意定义的数据类型要和引用的主键一样
telephone char(11),
foreign key(stu_id) references tb_student(id)
)engine=innodb charset=utf8;
alter table tb_tel add foreign key(stu_id) references tb_student(id);
alter table tb_tel drop foreign key 外键名; -- 删除外键约束
检查(mysql不支持):
例子:
create table tb_test(
id ...,
gander char(1),
age int,
...
check(gander = 'M' or gander='G'), -- 约束gander只能取G或者M
check(age>=16 and age<=60), -- 约束age只能大于等于16,小于等于60
);
默认值设置:
create table tb_test(
id ...,
gander char(1) default 'M'
);