mysql - 约束(constraint)
约束实际上就是表中数据的限制条件,目的就是为了保证表中的记录完整和有效。
约束种类
非空约束(not null)
唯一性约束(unique)
主键约束(primary key) PK
外键约束(foreign key) FK
检查约束(目前MySQL不支持、Oracle支持)
非空约束:
mysql> create table t_user(
-> id int(10),
-> name varchar(32) not null
-> );
Query OK, 0 rows affected (0.08 sec)
唯一性约束:
unique约束的字段,具有唯一性,不可重复,但可以为null
-
列级约束
mysql> create table t_user( -> id int(10), -> name varchar(32) not null, -> email varchar(128) unique -> ); Query OK, 0 rows affected (0.03 sec)
-
表级约束,可以给多个字段联合约束(表示两个或以上的字段同时与另一条记录相等,则报错)
mysql> create table t_user( -> id int(10), -> name varchar(32) not null, -> email varchar(128), -> unique(name,email) -> ); Query OK, 0 rows affected (0.01 sec)
表级约束可以给约束起名字(方便以后通过这个名字来删除这个约束)
mysql> create table t_user( -> id int(10), -> name varchar(32) not null, -> email varchar(128), -> constraint t_user_email_unique unique(email) -> ); Query OK, 0 rows affected (0.06 sec)
主键
一张表应该有主键字段,如果没有,表示该表无效
主键值:是当前行数据的唯一标识、是当前行数据的身份证号
即使表中两行记录相关数据相同,但由于主键值不同,所以也认为是两行不同的记录
- 单一主键:给一个字段添加主键约束(列级定义)
mysql> create table t_user( -> id int(10) primary key, -> name varchar(32) -> ); Query OK, 0 rows affected (0.07 sec)
- 复合主键(表级定义)
mysql> create table t_user( -> id int(10), -> name varchar(32) not null, -> email varchar(128) unique, -> primary key(id,name) -> ); Query OK, 0 rows affected (0.05 sec)
主键约束与“not null unique”区别
给某个字段添加主键约束之后,该字段不能重复也不能为空,效果和"not null unique"约束相同,但是本质不同。
键约束除了可以做到"not null unique"之外,还会默认添加"索引——index"
文章来源:https://xulinjie.blog.csdn.net/article/details/79655073