19约束之间的比较:主键约束联合约束唯一约束外键约束

Posted stephanie-boke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19约束之间的比较:主键约束联合约束唯一约束外键约束相关的知识,希望对你有一定的参考价值。

约束之间的比较:主键约束、联合约束、唯一约束、外键约束

1、主键约束,primary_key

能唯一确定一张表中的记录,也就是我们通过给某个字段添加约束,就可以使得改字段不重复且不为空。

create table test1(
id int primary key,
name varchar(20) not null
);

1.2、联合约束,只要联合的主键值加起来不重复就可以了,且不为空

create table test2(
id int,
name varchar(20),
password varchar(20),
primary key(id,name)
);

mysql> desc test2;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| name     | varchar(20) | NO   | PRI | NULL    |       |
| password | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set

insert into test2 values(1,‘张三‘,‘000‘);
insert into test2 values(1,‘李四‘,‘000‘);
insert into test2 values(2,‘张三‘,‘000‘);
Query OK, 1 row affected

insert into test2 values (null,‘xiaoming‘,‘000‘);
1048 - Column ‘id‘ cannot be null

1.3 当创建表好了之后添加约束

create table test3(
id int,
name varchar(20)
);

alter table test3 add primary key (id);

或者:

alter table test3 modify id int primary key;

1.4 删除主键约束

alter table test3 drop primary key;

2、唯一约束,unique

约束的字段不为空,当只约束一个字段的时候,显示的是UNI,若修饰多个字段,显示的是MUL

create table test4(
id int,
name varchar(20),
unique(name)
);

create table test4(
id int,
name varchar(20) unique
);

2.1 当创建表好了之后添加约束

create table test4( 
id int,
name varchar(20)
);

alter table test4 add unique(name);

或者

alter table test4 modify name varchar(20) unique;

mysql> desc test4;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set

2.2 约束多个字段,都不能为空,只要组合键不重复就行,单个键重复不影响

create table test4(
id int,
name varchar(20),
unique (id,name)
);

mysql> desc test4;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  | MUL | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set

insert into test4 values (1,‘lisi‘);
insert into test4 values (2,‘lisi‘);

2.3 删除约束

即使是联合约束,相当于查找汉字的首字母和具体拼写一样,这种联合约束,只能直接删除主要的约束(首字母),并且删除掉这个约束后,所有的约束均删除了 联合约束只能删除主要约束,并且主要约束删除了,所有约束都删除了

alter table test4 drop index name;
1091 - Can‘t DROP ‘name‘; check that column/key exists

alter table test4 drop index id;
Query OK, 2 rows affected
Records: 2  Duplicates: 0  Warnings: 0

3、 primary_key 、 unique 区别

  • primary key = unique + not null
  • UNIQUED 可空,可以在一个表里的一个或多个字段定义;PRIMARY KEY 不可空不可重复,在一个表里可以定义联合主键;

参考资料:
https://www.bilibili.com/video/av39807944/?p=12 https://blog.csdn.net/nanaMasuda/article/details/52543177

以上是关于19约束之间的比较:主键约束联合约束唯一约束外键约束的主要内容,如果未能解决你的问题,请参考以下文章

MySql基础学习-Sql约束

主键约束,外键约束,空值约束,默认值约束,唯一约束,检查约束的各个作用是啥?

一口气看完MySQL--上篇

SQL Server中的六种约束:主键约束,外键约束,唯一约束,非空约束,检查约束,默认约束

mysql 5.7 使用主键约束

Oracle数据库,非空约束主键约束外键约束唯一约束