mysql数据库学习05-表约束

约束包括五种:

*)所有的约束都存在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'

);

猜你喜欢

转载自blog.csdn.net/zhuangxingzan/article/details/84791528