约束 CONSTRAINT
Posted 0820ll
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了约束 CONSTRAINT相关的知识,希望对你有一定的参考价值。
约束用于限制加入表中数据的类型
约束的种类:
非空约束(NOT NULL):约束列不接受NULL值,强制字段始终包含值。
唯一约束(UNIQUE):约束一列或一组列中的数据是唯一的。表中可以有多个唯一约束。
主键约束(PRIMARY KEY):约束一列或一组列中的数据是唯一的,且不能改动,一个表中只能有一个主键约束。
外键约束(FOREIGN KEY):外键是表中的一列,其值必须列在另一个表的主键中。只有InnoDB支持。
默认值约束(DEFAULT):约束向列提供默认值。
检查约束(CHECK):用于保证一列或一组列中的数据满足一组指定的条件。用于约束列中值的合法取值范围。mysql不支持该约束。
非空约束 NOT NULL
默认情况下列值是可以接受NULL值得。
创建表示添加非空约束:在类的类型后面添加NOT NULL
create table 表名 ( 列1 数据类型 not null, 列2 数据类型 not null );
修改表添加非空约束
alter table 表名 add 列名 数据类型 not null; -- alter table 表名 modify 列名 数据类型 not null;
删除非空约束
alter table 表名 modify 列名 数据类型 null;
唯一约束 UNIQUE
唯一约束与主键约束的区别
--表中可以包含多个唯一约束但只能包含一个主键
--唯一约束列可以包含NULL值,但主键不可以
--唯一约束列可以修改或更新,但是主键不可以
--唯一约束列的值可删除后重复使用,但是主键不可以
--唯一约束列不可以用来定义外键
创建表示使用UNIQUE(列名) 指定唯一约束,有以下4方式
create table 表名( 列名 数据类型, 列名 数据类型 unique, ); -- create table 表名( 列名 数据类型, 列名 数据类型, unique(列名,列名) ); -- create table 表名( 列名 数据类型, 列名 数据类型 unique key 唯一索引名(列名,列名,...) ); -- create table 表名( 列名 数据类型, 列名 数据类型, constraint 约束名 unique(列名,列名,...) );
向已有表中添加唯一约束
alter table 表名 add unique key 唯一索引名(列名,列名,...) alter table 表名 add unique(列名,列名, ...) alter table 表名 add constraint 约束名 unique(列名,列名,...)
修改表中的某列为唯一索引
alter table 表名 modify 列名 数据类型 unique;
删除表中的唯一约束
alter table 表名 drop index 唯一索引名; -- 唯一索引名可通过show create table 表名查询获得
主键约束 PRIMARY KEY
表中任意类只要满足以下条件,都可以用于主键
--任意两行的主键都不相同
--每行都具有主键值(即列中不允许NULL值)
--包含主键的列从不修改或更新
--主键值不能重用
创建表时指定主键
create table 表名( 列名 数据类型, 列名 数据类型, [constraint [索引名]] PRIMARY KEY(列名) ); -- create table 表名( 列名 数据类型 PRIMARY KEY, 列名 数据类型 );
向已有表中增加主键约束
alter table 表名 add 列名 数据类型 primary key; -- 向表中增加一列,并且将其设为主键 -- alter table 表名 add primary key(列名); --将表中已有的列变为主键 -- alter table 表名 add constraint [约束名] primary key(列名); --将表中已有的列变为主键
删除主键约束
alter table 表名 drop primary key;
外键约束 FOREIGN KEY 只有InnoDB支持外键约束
在创建表示定义外键约束
create table 主表名( 列名 数据类型, 列名 数据类型, primary key(列名) ); create table 附表名( 列名 数据类型, 列名 数据类型, constraint [约束名] foreign key(列名) references 主表名(主表的primary key列名) );
向已有表中添加外键约束
alter table 表名 add constraint [约束名] foreign key(列名) references 主表名(主表的primary key列名);
删除表中的外键约束
alter table 表名 drop foreign key 外键约束名;
默认值约束 DEFAULT
create table 表名( 列名 数据类型 default 默认值, 列名 数据类型 );
向已有表添加默认值约束或修改默认值约束
alter table 表名 modify 列名 数据类型 [default 默认值]; -- alter table 表名 alter 列名 set default 默认值;
删除默认值约束
alter table 表名 alter 列名 drop default;
以上是关于约束 CONSTRAINT的主要内容,如果未能解决你的问题,请参考以下文章
SQLSTATE [23000]:违反完整性约束:4025 CONSTRAINT