原文地址: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')

主键和唯一索引的区别相关推荐

  1. oracle中主键和唯一索引的区别说明

    上周六去参加上海Oracle WDP俱乐部沙龙的一次交流,其中提到了关于"Oracle中主键和唯一索引的区别",基本上大家都可以说上几个,在网上也可以找到,但是总感觉不太全,根据自 ...

  2. mysql主键和唯一索引_mysql 主键和唯一索引的区别

    主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键. 唯一性索引列允许空值,而主键列不允许为空值. 主键列在创建时,已经默认为非空 ...

  3. mysql 主键和唯一索引的区别

    主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键. 唯一性索引列允许空值,而主键列不允许为空值. 主键列在创建时,已经默认为非空 ...

  4. 主键 和 唯一索引 的区别

    主键是一种约束: 唯一索引是一种索引 主键创建后一定包含一个唯一索引:但唯一索引不一定是主键 主键不允许空值:唯一索引允许(唯一索引中null表示没有. 如果有,则唯一)

  5. Oracle中主键和唯一索引的区别oracle中联合主键的作用

    在创建主键的同时会生成对应的唯一索引,主键在保证数据唯一性的同时不允许为空, 而唯一索引可以有一个为空的数据项,一个表中只能有一个主键,但是一个主键可以有多个字段,一个表中可以有多个唯一索引. 联合主 ...

  6. 主键与唯一索引的区别

    1.主键一定是唯一性索引,唯一性索引并不一定就是主键: 2.一个表中可以有多个唯一性索引,但只能有一个主键: 3.主键列不允许空值,而唯一性索引列允许空值.

  7. mysql主键和唯一索引_主键和唯一索引的有什么区别

    主键和唯一索引的区别 -- 区别 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键. 唯一性索引列允许空值,而主键列不允许为空值 ...

  8. 索引,主键,唯一索引,联合索引的区别

    https://blog.csdn.net/qq_33275924/article/details/80220797 https://www.cnblogs.com/ymj0906/p/4240856 ...

  9. 索引,主键,唯一索引,联合索引 的区别

    简单描述MySQL中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响 索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们 包含着对数据表里所有记录的引用 ...

最新文章

  1. 【 MATLAB 】find 函数的使用(线性索引)
  2. spring 深入reading
  3. android 学习随笔二十(多媒体编程 )
  4. 易语言金盾4.0登陆特征码
  5. 基于J2EE+JBPM3.x/JBPM4.3+Flex流程设计器+Jquery+授权认证)企业普及版贝斯OA与工作流系统...
  6. 2021牛客暑期多校训练营4 E-Tree Xor(异或+思维+区间交 or Trie树)
  7. 使用HazelCast进行休眠缓存:JPA缓存基础知识
  8. 从数据角度看,每家公司只有2种角色:看看你更适合哪一种?
  9. 带你自学Python系列(十七):Python中类的用法(三)
  10. 兄弟们别加班了,老板不会因为你拼命写代码而感谢你啊~有木有啊
  11. Win2008r2 由ESXi 转换到 HyperV的处理过程
  12. 动手试试Android Studio插件开发
  13. jQuery的实用特性扩展类库:jQuery++
  14. 输入九九乘法表c语言,九九乘法表的输入(c语言)
  15. 莫烦nlp-GPT 单向语言模型
  16. 谷歌浏览器、Yandex浏览器使用体验分享
  17. Q245R正火控扎一探-20℃冲击容器板切割,舞钢Q245R-20℃冲击
  18. 社区开放任务指南-3210-HTML5在FirefoxOS上的支持情况分析
  19. 教你如何在电脑上建一个绝密文件夹
  20. android textview截断,Android Textview文字在底部被截断

热门文章

  1. matlab运行函数的过程,关于matlab的一些作业一、要求写出窗口运行过程及结果1.利用Matlab求函数f(x)=-x2+ex+lnx的导数、...
  2. 理论考试的一些记忆技巧
  3. 微信小程序--上传图片加水印
  4. CSDN视频网站观后感
  5. 网络--keytool自签名SSL证书(免费)以及私钥签名、公钥验签
  6. 噪声概念: 信噪比(SNR)、噪声谱密度(NSD)、白噪声(n)、粉红噪声(1/f)
  7. FUNCTION 数据库名.GETDATE does not exist 详情页下单
  8. Terminal 中使用vi的快捷方式
  9. 面试积累(java的内存分析)
  10. PROFINET协议解析-DCP