主键和唯一索引的区别
原文地址:http://blog.csdn.net/baoqiangwang/article/details/4832814
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
区别
1. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
2. 唯一性索引列允许空值,而主键列不允许为空值。
3. 主键列在创建时,已经默认为空值 + 唯一索引了。
4. 主键可以被其他表引用为外键,而唯一索引不能。
5. 一个表最多只能创建一个主键,但可以创建多个唯一索引。
6. 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。
7. 在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。
-- 创建一张仅包含主键和唯一索引的表
CREATE TABLE test
(PrimaryKey VARCHAR2(20),UniqueKey VARCHAR2(20)
);
-- 分别创建主键和唯一索引,语法不同
ALTER TABLE test ADD CONSTRAINT test_PrimaryKey PRIMARY KEY (PrimaryKey);
CREATE UNIQUE INDEX test_UniqueKey ON test (UniqueKey);
-- 在 USER_INDEXES 中可以看到两个索引名称
SELECT table_name,table_type,index_name,index_type,uniqueness FROM USER_INDEXESWHERE TABLE_NAME='TEST';
-- 在 USER_IND_COLUMNS 中可以看到两个索引字段名称
SELECT table_name,index_name,column_name,column_position FROM USER_IND_COLUMNS WHERE TABLE_NAME='TEST';
-- 在 USER_CONSTRAINTS 仅可以看到主键约束名称
SELECT table_name,constraint_name,constraint_type FROM USER_CONSTRAINTS WHERE TABLE_NAME='TEST';
-- 在 USER_CONS_COLUMNS 仅可以看到主键约束字段名称
SELECT table_name,constraint_name,column_name,position FROM USER_CONS_COLUMNS WHERE CONSTRAINT_NAME IN (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME='TEST');
-- 为唯一索引增加一个非空约束
ALTER TABLE test MODIFY UniqueKey NOT NULL;
-- 在 USER_CONSTRAINTS 仅可以看到主键约束名称和非空约束名称
SELECT table_name,constraint_name,constraint_type FROM USER_CONSTRAINTS WHERE TABLE_NAME='TEST'
-- 在 USER_CONS_COLUMNS 仅可以看到主键约束字段名称和非空约束字段名称
SELECT table_name,constraint_name,column_name,positionFROM USER_CONS_COLUMNS WHERE CONSTRAINT_NAME IN (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME='TEST')
主键和唯一索引的区别相关推荐
- oracle中主键和唯一索引的区别说明
上周六去参加上海Oracle WDP俱乐部沙龙的一次交流,其中提到了关于"Oracle中主键和唯一索引的区别",基本上大家都可以说上几个,在网上也可以找到,但是总感觉不太全,根据自 ...
- mysql主键和唯一索引_mysql 主键和唯一索引的区别
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键. 唯一性索引列允许空值,而主键列不允许为空值. 主键列在创建时,已经默认为非空 ...
- mysql 主键和唯一索引的区别
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键. 唯一性索引列允许空值,而主键列不允许为空值. 主键列在创建时,已经默认为非空 ...
- 主键 和 唯一索引 的区别
主键是一种约束: 唯一索引是一种索引 主键创建后一定包含一个唯一索引:但唯一索引不一定是主键 主键不允许空值:唯一索引允许(唯一索引中null表示没有. 如果有,则唯一)
- Oracle中主键和唯一索引的区别oracle中联合主键的作用
在创建主键的同时会生成对应的唯一索引,主键在保证数据唯一性的同时不允许为空, 而唯一索引可以有一个为空的数据项,一个表中只能有一个主键,但是一个主键可以有多个字段,一个表中可以有多个唯一索引. 联合主 ...
- 主键与唯一索引的区别
1.主键一定是唯一性索引,唯一性索引并不一定就是主键: 2.一个表中可以有多个唯一性索引,但只能有一个主键: 3.主键列不允许空值,而唯一性索引列允许空值.
- mysql主键和唯一索引_主键和唯一索引的有什么区别
主键和唯一索引的区别 -- 区别 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键. 唯一性索引列允许空值,而主键列不允许为空值 ...
- 索引,主键,唯一索引,联合索引的区别
https://blog.csdn.net/qq_33275924/article/details/80220797 https://www.cnblogs.com/ymj0906/p/4240856 ...
- 索引,主键,唯一索引,联合索引 的区别
简单描述MySQL中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响 索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们 包含着对数据表里所有记录的引用 ...
最新文章
- R语言ggplot2可视化:将dataframe和数据列名称传递给函数通过函数进行ggplot2可视化输出
- micropython arduino选哪个好_玩转GPIO之ESP32基于MicroPython与Arduino的计算性能测试
- 二 RHEL7.2下的Docker配置
- java中utilities类_servletutilities属于哪个java包
- linux 线程 进程经典文章
- matlab去除周期噪声,matlab在空域与频域中去除周期噪声、椒盐噪声的简单应用
- 【Qt】Visual Studio中无法打开Qt中UI文件
- 机器学习与不确定性_机器学习求职中的不确定性
- 3650m5服务器内存选择 ibm_各大品牌服务器租用价格表明细(附详细表单)
- OpenSSL 创建自签名证书
- elasticsearch2.x优化小结(单节点)
- matlab电磁场,电磁场与波 电磁材料及MATLAB计算
- Python内置TCP服务器
- Linux中设置网卡静态IP地址方法
- python 欧姆龙plc通信_电脑与欧姆龙plc通过网络通信
- 利用APPInventor开发手机APP,实现OBLOQ-IOT与Arduino设备通信
- xubuntu language support
- python制作分布图
- Linux磁盘满了怎么办?
- 由于之前的错误,Context[]启动失败(SSM)