mysql主键和唯一索引_主键和唯一索引的有什么区别
主键和唯一索引的区别
-- 区别
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
唯一性索引列允许空值,而主键列不允许为空值。
主键列在创建时,已经默认为空值 + 唯一索引了。
主键可以被其他表引用为外键,而唯一索引不能。
一个表最多只能创建一个主键,但可以创建多个唯一索引。
主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。
在 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_INDEXES
WHERE 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_typeFROM 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')
mysql主键和唯一索引_主键和唯一索引的有什么区别相关推荐
- mysql非主键索引_主键索引和非主键索引的区别
1. 什么是最左前缀原则? 以下回答全部是基于MySQL的InnoDB引擎 例如对于下面这一张表 如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下 如果我们要进行模糊查 ...
- mysql非主键索引_主键索引和非主键索引解析
1. 什么是最左前缀原则? 以下回答全部是基于MySQL的InnoDB引擎 例如对于下面这一张表 如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下 如果我们要进行模糊查 ...
- 主键主键外键和索引_主键和外键的目的/用途是什么?
主键主键外键和索引 Primary and foreign keys are a way in which to constrain related data together to ensure d ...
- mysql主键被强制定义_主键约束用来强制数据的( )完整性。_学小易找答案
[其它]上传excel实训3. [单选题]在一张表中可以创建_________个集聚索引. [单选题]日期时间型数据类型(datetime)的长度是( ). [其它]数据分析与函数练习表(控辍表).x ...
- mysql四种常用的索引_四种常见的索引类型
主键索引:数据记录里面不能有 null,数据内容不能重复,在一张表里面不能有 多个主键索引. 普通索引:使用字段关键字建立的索引,主要是提高查询速度 唯一索引:字段数据是唯一的,数据内容里面能否为 n ...
- mysql 有外键 怎么插入数据_外键约束的表怎么插入数据
有外键的情况应该先添加主表数据,再添加副表数据. 如:有以下两张表 班级表: CLASSID NAME 1 一班 2 二班 学生表: SID NAME CLASSID 1 张三 1 2 李四 1 3 ...
- mysql为什么添加索引_当我添加新索引时,为什么MySQL中索引的基数保持不变?
如果表中只有1行,则索引的基数当然应为1.它只是计算唯一值的数量. 如果您将索引视为基于存储桶的查找表(如散列),则基数是存储桶的数量. 以下是它的工作原理:当您在一组列(a,b,c,d)上构建索引时 ...
- 主成分与因子分析异同_如何做主成分分析和因子分析?它们的区别与联系在哪里?...
"主成分分析和因子分析有什么区别和联系?"这个问题其实很多朋友在后台提问过,今天将这个问题的答案写成推送分享给大家.以后有问题或需求,请在下方留言区留言.觉得解释得好的朋友,记得打 ...
- 创建二级索引_技术分享 | InnoDB 排序索引的构建
原创: 管长龙 译 爱可生开源社区 3天前 作者:Satya Bodapati 从 MySQL 5.7 开始,开发人员改变了 InnoDB 构建二级索引的方式,采用自下而上的方法,而不是早期版本中自上 ...
最新文章
- poj - 1651 Multiplication Puzzle
- 获取注解中的属性信息
- KS004 基于SSH通讯录系统设计与实现
- 设计模式笔记7:原型模式
- 使用Nginx+FFMPEG搭建HLS直播转码服务器
- W32.Downedup.B顽固病毒——查杀记
- 计算机网络中数据的传递过程
- 计算机领域认知个人陈述,计算机专业个人陈述十九
- 关于本人在多个技术平台发布文章的声明
- java rc2加密_急求java RC2加密算法
- 20190904:(leetcode习题)合并两个有序数组
- 反编译代码遇到的问题
- 电脑、手机装机必备软件的抉择[土豆-侃天下]
- Azure云平台 GPS大数据解决方案 EventHub+Azure Databricks+Azure Cosmos DB Cassandra
- 魏鹏机器人_3D打印室、机器人工程挑战室……山东这所学校的“网红教室”火了!...
- 六足机器人的步态分析与实现——1
- C语言中delay的用法
- 使用TensorFlow搭建智能开发系统,自动生成App UI代码
- 二进制 八进制 十进制 十六进制 之间进制转换(图解篇)
- utf8汉字编码16进制对照
热门文章
- 我爱天文 - 你有星空摄影的知识吗?
- ECE220生存指南[03]MP8: 递归函数实现油漆桶问题,Flood Fill with Recursion
- php authorize,/TMP问题与An AJAX HTTP error与Path: /core/authorize.php/core/authorize.php解决办法...
- Windows Server 2019 AD域控搭建
- 用iMazing管理苹果手机的四大特色功能
- 程序员在囧途之垃圾创业团队
- php中怎么取出数组中的值,php怎么取出数组内指定的值
- 2014年移动电源产品风险监测质量分析报告
- android TextView 设置省略号结尾
- JAVA定义printX方法,打印X图形