大家好,我是一只学弱狗,记录学习的点点滴滴!
优质文章
优质专栏
PRIMARY KEY和UNIQUE是用于创建表或修改表时对字段所添加的约束,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;
执行上面的代码,可得到下面如图所示的结果
说明我们对学生编号和座位号的约束设置成功,接下来,我们往表中插入数据
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');
终于出错了
通过表级约束将两个(或者多个)字段组合在一起时,只有这两个字段值都一样时,才报错,这就叫做组合,可见,主键是允许组合的,对于唯一呢,大家自己动手试一下吧!