PRIMARY KEY和UNIQUE的区别(基于MySQL)

大家好,我是一只学弱狗,记录学习的点点滴滴!

优质文章

优质专栏


PRIMARY KEYUNIQUE是用于创建表或修改表时对字段所添加的约束,PRIMARY KEY的作用是将字段设置为主键,而UNIQUE则是将字段设置为唯一,这两种约束有很多的相似点,但也有不同点,且对于小白而言容易混淆,接下来,我就通过图文的方式,来阐述下这两者的区别。

一、唯一和非空

我们先通过下列代码创建一个表stuinfo

CREATE TABLE IF NOT EXISTS  stuinfo(
 id INT PRIMARY KEY,#id代表学生编号
 seat INT UNIQUE #seat代表座位号
)

这里,学生编号约束被设置为PRIMARY KEY,座位号被设置为UNIQUE,接下来,我们通过下面的代码来查看下表stuinfo的结构

DESC stuinfo;

执行上面的代码,可得到下面如图所示的结果
stuinfo表的结构说明我们对学生编号和座位号的约束设置成功,接下来,我们往表中插入数据

INSERT INTO stuinfo VALUES(NULL,NULL);

即均插入NULL值,得到下面的结果
在这里插入图片描述
提示出一个错误:“Column ‘id’ cannot be null”,意为id不能为空,所以被PRIMARY KEY所约束的字段不能为NULL,而被UNIQUE所约束的字段可以为NULL
在这里插入图片描述
从这张图也可以看出,当把字段设置为主键时,’非空?‘也会被自动选择选择
接下来我们继续插入数据

INSERT INTO stuinfo VALUES(001,1);
INSERT INTO stuinfo VALUES(001,2);

得到下面的错误提示
在这里插入图片描述
第一条语句插入成功,但当插入第二条语句时,却提示失败,所以主键保证唯一性,接下来,我们继续插入数据

INSERT INTO stuinfo VALUES(002,NULL);
INSERT INTO stuinfo VALUES(003,NULL);

以上两条语句均成功,所以可得出被UNIQUE所约束的关键字可以为NULL,且可以都多个NULL,继续插入数据

INSERT INTO stuinfo VALUES(004,3);
INSERT INTO stuinfo VALUES(005,3);

出现下面的错误提示
在这里插入图片描述
可见,UNIQUE也可保证数据的唯一性

二、一个表中是否可以有多个

先通过下列代码删除表stuinfo

DROP TABLE IF EXISTS stuinfo;

通过下列代码创建一个新表

CREATE TABLE IF NOT EXISTS stuinfo(
 id INT PRIMARY KEY,
 seat INT PRIMARY KEY
);

会报下列的错误
在这里插入图片描述
所以,一个表中被PRIMARY KEY所约束的关键字至多有一个
接下来通过下列代码删除并创建表stuinfo

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE IF NOT EXISTS stuinfo(
 id INT UNIQUE ,
 seat INT UNIQUE
);

显示上述语句执行成功,我们再看下表的结构
在这里插入图片描述
所以,一个表中被UNIQUE所约束的字段可以有多个

三、是否允许组合

什么是组合呢?
我们通过一个例子来看一下

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE IF NOT EXISTS stuinfo(
 id INT,
 stuName VARCHAR(20), 
 CONSTRAINT pk PRIMARY KEY(id,stuName)
)

我们来看下表的结构
在这里插入图片描述
有的朋友可能会问,纳尼?,一个表中不是至多有一个主键么?没错,这就是组合,这有什么意义么?我们通过代码来说明一下

INSERT INTO stuinfo VALUES(1,'Alice');
INSERT INTO stuinfo VALUES(1,'Boily');

结果是这样的
在这里插入图片描述
成功,id不是主键么?怎么能成功呢?我们继续插入数据


INSERT INTO stuinfo VALUES(2,'Kitty');
INSERT INTO stuinfo VALUES(3,'Kitty');

继续执行上面的代码,仍然成功,哦!,还是不理解,我们继续插入数据


INSERT INTO stuinfo VALUES(4,'Ace');
INSERT INTO stuinfo VALUES(4,'Ace');

终于出错了
在这里插入图片描述
通过表级约束将两个(或者多个)字段组合在一起时,只有这两个字段值都一样时,才报错,这就叫做组合,可见,主键是允许组合的,对于唯一呢,大家自己动手试一下吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只学弱狗!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值