又来说一下顺序~关于唯一索引和唯一约束的顺序
上次说了同一个对象里面不同触发器的执行顺序。今天我也想分享一些我在同一个表里面,建上不同的唯一约束,不同的唯一索引,看下结果会怎样
首先简单建个测试表,不多,就4列
CREATE TABLE AAA3 (ID INT IDENTITY(1,1),Col1 VARCHAR(50),Col2 VARCHAR(50),Col3 VARCHAR(50))
情况1:然后往Col1 都添加上唯一索引和唯一约束。然后插入同样的数据,看下提示信息报那个先
CREATE UNIQUE INDEX UQ_AAA3_Col1 ON AAA3(Col1) ALTER TABLE dbo.AAA3 ADD CONSTRAINT UQ_AAA3_Col1_1 UNIQUE(Col1)INSERT INTO dbo.AAA3( Col1, Col2, Col3 ) VALUES ( N'1', N'',N'' )GO 2开始执行循环(1 行受影响) 消息 2601,级别 14,状态 1,第 9 行 不能在具有唯一索引“UQ_AAA3_Col1”的对象“dbo.AAA3”中插入重复键的行。重复键值为 (1)。 语句已终止。 ** 在执行批处理期间遇到错误。正在继续。 批处理执行已完成 2 次。
出错是肯定的,但是可以看到,出错信息是显示唯一索引 UQ_AAA3_Col1 而并非唯一约束创建的索引 UQ_AAA3_Col1_1 。这里大概可以知道是在同一个字段里面比较,唯一索引比唯一约束要优先。(当然谁那么无聊……)
情况2:然后我尝试了一下在不同的列上面建唯一约束和唯一索引,看下是哪个比较优先,用在本例子,就是 Col2 创建唯一约束, Col3 创建唯一索引
ALTER TABLE dbo.AAA3 ADD CONSTRAINT UQ_AAA3_Col2_1 UNIQUE(Col2) CREATE UNIQUE INDEX UQ_AAA3_Col3 ON AAA3(Col3)INSERT INTO dbo.AAA3( Col1, Col2, Col3 ) VALUES ( N'2', N'',N'' )消息 2627,级别 14,状态 1,第 9 行 违反了 UNIQUE KEY 约束“UQ_AAA3_Col2_1”。不能在对象“dbo.AAA3”中插入重复键。重复键值为 ()。
确实报唯一索引的抛出出的错。(我怀疑过,是因为Column_id 前后的关系吗?然而不是,即使我在Col2 建唯一索引,Col3 建唯一约束,结果也是一样。唯一约束的判定优先)。
情况3 :将情况2 的约束索引+情况1 的唯一索引都干掉,新增一个组合唯一索引查看效果。把Col1,Col2 组成组合唯一约束,看下效果是哪个好
ALTER TABLE dbo.AAA3 ADD CONSTRAINT UQ_AAA3_Col1_2 UNIQUE(Col1,Col2)INSERT INTO dbo.AAA3( Col1, Col2, Col3 ) VALUES ( N'1', N'',N'' )消息 2627,级别 14,状态 1,第 9 行 违反了 UNIQUE KEY 约束“UQ_AAA3_Col1_2”。不能在对象“dbo.AAA3”中插入重复键。重复键值为 (1, )。
这个例子看出,符合唯一约束优先检测~so,我想到的情况就是这个样纸了~
PS:有时觉得研究这些问题可能是没有什么实际应用场景~但是还是需要脑洞一下了~聊此一笑呵呵
转载于:https://www.cnblogs.com/Gin-23333/p/5250479.html
又来说一下顺序~关于唯一索引和唯一约束的顺序相关推荐
- SQL Server中唯一索引和唯一约束之间的区别
This article gives you an overview of Unique Constraints in SQL and also the Unique SQL Server index ...
- PG唯一索引与唯一约束.sql
PG 唯一约束与唯一索引 实例 create table test(id serial, name text); ALTER TABLE test add CONSTtraint uk_test_na ...
- oracle 唯一索引,唯一约束,主键之间的联系
主键(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录,在两个表的关系中,主键用来在一个表中引用来自于另一个表中的特定记录,,主键时一种唯一关键字,表定义的一部分. ...
- 主键,唯一索引,唯一约束三者之间的联系与区别
主键本质是约束,值不为空,一个表只能建一个,其目的是检查数据的正确性: 唯一索引本质是索引,值可为空,一个表能建多个,其目的是实现数据查询的优化: 唯一约束本质是约束,值可为空,一个表能建多个,其目的 ...
- oracle 主键 唯一性,oracle 唯一索引,唯一约束,主键之间的联系
主键(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录,在两个表的关系中,主键用来在一个表中引用来自于另一个表中的特定记录,,主键时一种唯一关键字,表定义的一部分. ...
- 主码索引、聚集索引、非主码索引(辅助索引)、唯一索引、外键索引、复合索引、非主码索引、聚集主码(聚集索引)、单列索引、多列索引、普通索引等...
强烈建议看了第一个参考文献再来看这个篇博文,因为此处不准备讲底层数据结构的实现. 索引:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构.其 ...
- mysql中主键、普通索引、唯一索引和全文索引
SQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录 开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录 ...
- mysql 唯一索引 性能_普通索引和唯一索引的区别、性能差异,以及其他索引简介...
唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log n). 1.普通索引 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度.因此,应该只为那些最 ...
- sqlite 复合唯一索引_SQLite 索引(Index)
索引(Index)是一种特殊的查找表,数据库搜索引擎用来加快数据检索.简单地说,索引是一个指向表中数据的指针.一个数据库中的索引与一本书后边的索引是非常相似的. 例如,如果您想在一本讨论某个话题的书中 ...
最新文章
- 使用睡袋_在户外一个关乎睡眠的重要因素——睡袋
- 这个「化学家」登上Nature封面:工作007,8天完成近700次实验,还设计出新催化剂...
- spss预测变量重要性不可用_C4.5/5.0的SPSS操作
- linux下ssh登录PIX防火墙
- OpenMP入门教程(二)reduce sum
- js格式化文件大小, 输出成带单位的字符串工具
- easyUI的引用方式
- 怎么把动态图从python弄下来_Python将视频或者动态图gif逐帧保存为图片的方法
- MySQL查询优化-explain
- Mysql Too many connections解决方法
- 拿访问网站用户IP 纯JS实现
- office 高效办公智慧树_干货高效实用的office办公小技巧之word篇
- RS485光纤中继器有哪些优缺点?
- PHP+MySql+PDO小案例—文章管理系统
- oracle库锁表处理,oracle 数据库锁表处理 ORA-00031
- java中序列化之子类继承父类序列化
- Winform界面中实现菜单列表的动态个性化配置管理
- 2017中国云平台发展现状与趋势研究报告
- Gwallet小百科 | 阿里、腾讯等互联网巨头们的区块链布局
- texstudio暗色主题
热门文章
- 上海网络推广浅析外链对网站优化的影响有多大?需要注意什么?
- db2查看表结构_mysql误删数据库表的frm文件和ibd文件?试试这样恢复
- 如何实现搜索列表_图解:如何理解与实现散列表
- mysql主从skip1677_解决字符集不同引起的主从同步异常1677报错问题
- 卷积层和全连接层的区别_1*1的卷积核和全连接层有什么异同?
- mysql数据库游标有什么特性_MySQL数据库游标的概念介绍和游标的使用讲解
- 装完nvme固态经常蓝屏_微软确认Win10 20H2使用雷电连接固态盘会直接蓝屏死机
- TLS与SSL之间关系——SSL已经被IEFT组织废弃,你可以简单认为TLS是SSL的加强版
- lucene源码分析的一些资料
- Facebook图片存储系统Haystack——存小文件,本质上是将多个小文件合并为一个大文件来降低io次数,meta data里存偏移量...