-
mysql主键与唯一约束的区别_MySQL主键与唯一约束区别
2021-01-20 01:05:22主键与唯一约束区别在面试有可能会被问到。可以从以下几个方面对比一下。1、保证唯一性2、是否允许为空3、一个表可以有多少个4、是否允许组合保证唯一性两者都保证字段值的唯一性。建一个学生表create table student...主键与唯一约束区别在面试有可能会被问到。可以从以下几个方面对比一下。1、保证唯一性
2、是否允许为空
3、一个表可以有多少个
4、是否允许组合
保证唯一性
两者都保证字段值的唯一性。
建一个学生表create table student(
id int PRIMARY key, #主键
name VARCHAR(20) NOT NULL,#非空
seat int UNIQUE#唯一
)
id是主键,seat座位号唯一。
先插入两条id相同的数据测试。mysql> insert into student
-> (id,name,seat)
-> VALUES
-> (1,'haha',1),
-> (1,'john',2);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
上面语句是一次插入多条数据,报错因为id主键的值重复了,语句执行失败。
插入seat相同数据测试mysql> insert into student
(id,name,seat)
VALUES
(1,'haha',1),
(2,'john',1);
ERROR 1062 (23000): Duplicate entry '1' for key 'seat'
同样报错。
是否允许空值
在学生表中插入一条id为null的数据mysql> insert into student
->(id,name,seat)
->VALUE
-> (null,'haha',1);
ERROR 1048 (23000): Column 'id' cannot be null
报错了,id的值不能为null。
以上语句将seat为null测试mysql> insert into student
-> (id,name,seat)
-> VALUE
-> (1,'haha',null);
Query OK, 1 row affected (0.12 sec)
可以插入。
所以从两个实例得出,唯一性约束允许为空值,主键是不能为空值。
再插入一条seat为null的数据insert into student
->(id,name,seat)
-> VALUE
->(2,'abcd',null);
Query OK, 1 row affected (0.12 sec)
同样插入成功,查看一下表的数据mysql> select * from student;
+----+------+------+
| id | name | seat |
+----+------+------+
| 1 | haha | NULL |
| 2 | abcd | NULL |
+----+------+------+
2 rows in set (0.00 sec)
唯一性的空值可以重复,猜测是mysql版本的问题,有兴趣可以深入研究一下。查看mysql版本可以用version函数mysql> select version();
+------------------+
| version() |
+------------------+
| 5.1.30-community |
+------------------+
一个表可以有多少个主键和唯一键?
试一下将name也作为主键,用修改语句操作mysql> alter table student
modify name varchar(20)
PRIMARY KEY;
ERROR 1068 (42000): Multiple primary key defined
报错,主键重复定义了。
那将name改为唯一性约束试试,同样使用修改语句操作mysql> alter table student
modify name varchar(20)
UNIQUE;
Query OK, 2 rows affected (0.23 sec)
Records: 2 Duplicates: 0 Warnings: 0
操作成功了,再添加一个majorId字段,也是唯一性约束,测试mysql> alter table student
add majorId int UNIQUE;
Query OK, 2 rows affected (0.29 sec)
Records: 2 Duplicates: 0 Warnings: 0
依然成功。
所以,一张表,主键最多有一个,而唯一性键可以有多个。
是否允许组合
假设两个字段组合成主键,那定义时格式:PRIMARY KEY(字段1,字段2)。在表级约束添加。
执行以下语句,将原表删除,重新建表,id和name作为主键。drop table if EXISTS student
mysql> create table student(
->id int,
->name VARCHAR(20),
-> seat int,
-> PRIMARY KEY(id,name)
-> );
Query OK, 0 rows affected (0.16 sec)
建表成功,说明主键是可以组合的,用 show index from student 语句看一下表的索引(索引的知识以后会整理)
看起来有两个主键,一个是id,一个是name。其实不然,可以插入数据测试看看。
插入两条数据,id都为1,name值不同mysql> insert into student
(id,name,seat)
VALUES
(1,'haha',1),
(1,'john',2);
Query OK, 2 rows affected (0.12 sec)
Records: 2 Duplicates: 0 Warnings: 0
可以看到数据插入成功了,再插入一条id=1,name=haha的数据试试mysql> insert into student
(id,name,seat)
VALUE
(1,'haha',1);
ERROR 1062 (23000): Duplicate entry '1-haha' for key 'PRIMARY'
插入失败了。因为id=1并且name=haha的数据已经存在表中,不能重复插入,所以组合主键代表的还是一个主键,组合中所有列保证唯一性。
同样,唯一键也允许组合,添加格式:UNIQUE(字段1,字段2)。效果和组合主键也是一样的,不再测试了。
两者的对比就到这。总结一下,主键保证值的唯一性,不允许空值,一张表最多只能定义一个主键,允许组合,组合主键代表一个主键。唯一键也是保证值的唯一,但允许允许空值,一张表可以有多个唯一键,允许组合。
-
主键约束与唯一约束的区别
2020-03-28 20:26:29这里写自定义目录标题 主键约束: 默认就是不能为空, 唯一 外键都是指向另外一张表的主键 ...唯一约束: 列面的内容, 必须是唯一, 不能出现重复情况, 为空 唯一约束不可以作为其它表的外键 可以有多个唯一约束 ...这里写自定义目录标题
主键约束: 默认就是不能为空, 唯一- 外键都是指向另外一张表的主键
- 主键一张表只能有一个
唯一约束: 列面的内容, 必须是唯一, 不能出现重复情况, 可以为空
- 唯一约束不可以作为其它表的外键
- 可以有多个唯一约束
-
mysql 主键约束与唯一约束的区别
2019-01-02 10:19:17主键约束 PRIMARY KRY 主键 是唯一的 一张表只能有一个主键 AUTO_INCREMENT 一定要和主键连用 但主键不一定要和 AUTO_INCREMENT 连用 主键一定是非空的 NOT NULL 唯一约束 UNIQUE KEY 唯一约束 唯一约束可以... -
主键约束与唯一性约束的区别
2016-09-04 15:08:001.主键约束(PRIMARY KEY) 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。...1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表1.主键约束(PRIMARY KEY)
1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。
2) 是不可能(或很难)更新.
3) 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).
4) 主健可作外健,唯一索引不可;
2.唯一性约束(UNIQUE)
1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束.
2) 只要唯一就可以更新.
3) 即表中任意两行在 指定列上都不允许有相同的值,允许空(NULL).
4) 一个表上可以放置多个唯一性约束
3.唯一索引(INDEX)
创建唯一索引可以确保任何生成重复键值的尝试都会失败。
唯一性约束和主键约束的区别:
(1).唯一性约束允许在该列上存在NULL值,而主键约束的限制更为严格,不但不允许有重复,而且也不允许有空值。
(2).在创建唯一性约束和主键约束时可以创建聚集索引和非聚集索引,但在 默认情况下主键约束产生聚集索引,而唯一性约束产生非聚集索引
约束和索引, 前者是用来检查数据的正确性,后者用来实现数据查询的优化,目的不同。
唯一性约束与唯一索引有所不同:
(1).创建唯一约束会在Oracle中创建一个Constraint,同时也会创建一个该约束对应的唯一索引。
(2).创建唯一索引只会创建一个唯一索引,不会创建Constraint。
也就是说其实唯一约束是通过创建唯一索引来实现的。
在删除时这两者也有一定的区别:
删除唯一约束时可以只删除约束而不删除对应的索引,所以对应的列还是必须唯一的,
而删除了唯一索引的话就可以插入不唯一的值。 -
超键、候选键、主键的区别和主键约束与唯一约束的区别
2020-09-07 14:19:16主键(primary key):用户选作元组标识的一个候选键程序主键 比如一个小范围的所有人,没有重名的,考虑以下属性 身份证 姓名 性别 年龄 身份证唯一,所以是一个超键 姓名唯一,所以是一个超键 (姓名,性别)唯一,... -
db2中null和空值的区别_MySQL主键与唯一约束区别
2021-01-02 14:05:08主键与唯一约束区别在面试有可能会被问到。可以从以下几个方面对比一下。1、保证唯一性2、是否允许为空3、一个表可以有多少个4、是否允许组合保证唯一性两者都保证字段值的唯一性。建一个学生表create table student... -
唯一性约束和主键的区别
2011-10-10 23:16:00唯一性约束(1) 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。(2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的只。但是,唯一性约束所在的列并不是表的主键列。(3) 唯一性... -
主键与唯一性约束的区别
2013-04-18 16:07:091.主键约束(PRIMARY KEY) 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。...1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表 -
唯一性约束和主键的区别- -
2007-09-11 14:58:00唯一性约束和主键的区别- - 唯一性约束1) 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。(2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的只。但是,唯一性约束所在的列并... -
主键,唯一索引,唯一约束三者之间的联系与区别
2016-03-10 09:22:00主键本质是约束,值不为空,一个表只能建一个,其目的是检查数据的正确性;唯一索引本质是索引,值可为空,一个表能建多个,其目的...唯一约束本质是约束,值可为空,一个表能建多个,其目的是检查数据的正确性;... -
SQL Server主键/索引/唯一约束各名词联系与区别
2020-10-30 17:12:44唯一约束(Unique Constraint):约束唯一标识数据库表中的每条记录,确保表中的某一列或者复合列数据没有相同的值。 UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 拥有自动定义的 ... -
主键与唯一索引的区别
2019-06-10 15:19:55主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 唯一性索引列允许空值,而主键列不允许为空值。 主键列在创建时,已经默认为空值 + ... -
数据库索引键uk_主键、唯一键约束、索引区别与联系
2020-12-20 17:51:22主键、唯一键约束、唯一索引键是一个逻辑概念索引是存储在数据库中的一个物理结构1.一般情况下,在为列指定主键之后,Oracle会自动为列设置唯一性约束当约束列上没有索引时,在创建unique constraint时,oracle 会... -
主键与索引的区别
2020-10-16 10:33:53在数据库关系图中为表定义主zhi键将dao自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。 2、种类不同: 根据数据库的... -
Oracle主键、唯一键与唯一索引的区别
2015-09-16 20:13:00Oracle主键、唯一键与唯一索引的区别 一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同...接下来我们看看数据库中的主键约束、唯一键约束和唯一索引的区别。 伦理片 http://www.dotdy. -
主键、唯一键与唯一索引的区别
2016-05-29 13:30:00一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。...接下来我们看看数据库中的主键约束、唯一键约束和唯一索引的区别。 SQL> select * from v$version; BANNER ----... -
Oracle 主键、唯一键与唯一索引的区别
2013-09-15 19:01:48一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。...接下来我们看看数据库中的主键约束、唯一键约束和唯一索引的区别。 SQL> select * from v$version; BANNER ------------- -
主键、自增主键、主键索引、唯一索引概念区别与性能区别
2016-03-03 00:02:28主键索引:指的就是主键,主键没有明确的概念定义,主键既是约束,也是索引,主键是索引的一种,是唯一索引的特殊类型。创建主键的时候,数据库默认会为主键创建一个唯一索引。 自增主键:字段类型为数字、自增、... -
关系数据库中主键与唯一索引的区别
2015-03-20 15:12:23简要地说,主键和唯一索引,或者键和索引之间的最主要区别在于:键是一个逻辑层面的概念,涉及到数据模式的设计。从语法角度看,键被定义为一种约束。比方说,如果想定义外键(或称参考约束),那么相关列就必须先... -
mysql 主键与唯一索引的区别_主键和唯一索引的区别 - sliver_xu的个人空间 - OSCHINA - 中文开源技术交流...
2021-02-04 18:12:24主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。主键索引:数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是...
-
什么是konva.js?
-
机器学习可视化软件机器学习可视化软件
-
C#坦克大战带技能版源码(RealTank).zip
-
同时建立一个管道的读写
-
app软件测试全栈系列精品课程
-
IDEA常用快捷键汇总.docx
-
物联网基础篇:快速玩转MQTT
-
13种游戏机模拟器源代码.rar
-
MacOS11.0-brew 卡在Updating Homebrew
-
12. 最大值.cpp
-
DES的ECB加密解密汇总.zip
-
LogisticRegressionModel二分类概率问题
-
PowerBI重要外部工具详解
-
libFuzzer视频教程
-
单节点数仓环境配置以及docker的基本使用
-
中文分词数据集.zip
-
MySQL 高可用工具 DRBD 实战部署详解
-
马士兵老师HashMap学习笔记
-
tensorflow-js | 微信小程序课程
-
Windows系统管理