上次说了同一个对象里面不同触发器的执行顺序。今天我也想分享一些我在同一个表里面,建上不同的唯一约束,不同的唯一索引,看下结果会怎样

首先简单建个测试表,不多,就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

又来说一下顺序~关于唯一索引和唯一约束的顺序相关推荐

  1. SQL Server中唯一索引和唯一约束之间的区别

    This article gives you an overview of Unique Constraints in SQL and also the Unique SQL Server index ...

  2. PG唯一索引与唯一约束.sql

    PG 唯一约束与唯一索引 实例 create table test(id serial, name text); ALTER TABLE test add CONSTtraint uk_test_na ...

  3. oracle 唯一索引,唯一约束,主键之间的联系

    主键(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录,在两个表的关系中,主键用来在一个表中引用来自于另一个表中的特定记录,,主键时一种唯一关键字,表定义的一部分. ...

  4. 主键,唯一索引,唯一约束三者之间的联系与区别

    主键本质是约束,值不为空,一个表只能建一个,其目的是检查数据的正确性: 唯一索引本质是索引,值可为空,一个表能建多个,其目的是实现数据查询的优化: 唯一约束本质是约束,值可为空,一个表能建多个,其目的 ...

  5. oracle 主键 唯一性,oracle 唯一索引,唯一约束,主键之间的联系

    主键(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录,在两个表的关系中,主键用来在一个表中引用来自于另一个表中的特定记录,,主键时一种唯一关键字,表定义的一部分. ...

  6. 主码索引、聚集索引、非主码索引(辅助索引)、唯一索引、外键索引、复合索引、非主码索引、聚集主码(聚集索引)、单列索引、多列索引、普通索引等...

    强烈建议看了第一个参考文献再来看这个篇博文,因为此处不准备讲底层数据结构的实现. 索引:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构.其 ...

  7. mysql中主键、普通索引、唯一索引和全文索引

    SQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录 开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录 ...

  8. mysql 唯一索引 性能_普通索引和唯一索引的区别、性能差异,以及其他索引简介...

    唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log n). 1.普通索引 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度.因此,应该只为那些最 ...

  9. sqlite 复合唯一索引_SQLite 索引(Index)

    索引(Index)是一种特殊的查找表,数据库搜索引擎用来加快数据检索.简单地说,索引是一个指向表中数据的指针.一个数据库中的索引与一本书后边的索引是非常相似的. 例如,如果您想在一本讨论某个话题的书中 ...

最新文章

  1. 使用睡袋_在户外一个关乎睡眠的重要因素——睡袋
  2. 这个「化学家」登上Nature封面:工作007,8天完成近700次实验,还设计出新催化剂...
  3. spss预测变量重要性不可用_C4.5/5.0的SPSS操作
  4. linux下ssh登录PIX防火墙
  5. OpenMP入门教程(二)reduce sum
  6. js格式化文件大小, 输出成带单位的字符串工具
  7. easyUI的引用方式
  8. 怎么把动态图从python弄下来_Python将视频或者动态图gif逐帧保存为图片的方法
  9. MySQL查询优化-explain
  10. Mysql Too many connections解决方法
  11. 拿访问网站用户IP 纯JS实现
  12. office 高效办公智慧树_干货高效实用的office办公小技巧之word篇
  13. RS485光纤中继器有哪些优缺点?
  14. PHP+MySql+PDO小案例—文章管理系统
  15. oracle库锁表处理,oracle 数据库锁表处理 ORA-00031
  16. java中序列化之子类继承父类序列化
  17. Winform界面中实现菜单列表的动态个性化配置管理
  18. 2017中国云平台发展现状与趋势研究报告
  19. Gwallet小百科 | 阿里、腾讯等互联网巨头们的区块链布局
  20. texstudio暗色主题

热门文章

  1. 上海网络推广浅析外链对网站优化的影响有多大?需要注意什么?
  2. db2查看表结构_mysql误删数据库表的frm文件和ibd文件?试试这样恢复
  3. 如何实现搜索列表_图解:如何理解与实现散列表
  4. mysql主从skip1677_解决字符集不同引起的主从同步异常1677报错问题
  5. 卷积层和全连接层的区别_1*1的卷积核和全连接层有什么异同?
  6. mysql数据库游标有什么特性_MySQL数据库游标的概念介绍和游标的使用讲解
  7. 装完nvme固态经常蓝屏_微软确认Win10 20H2使用雷电连接固态盘会直接蓝屏死机
  8. TLS与SSL之间关系——SSL已经被IEFT组织废弃,你可以简单认为TLS是SSL的加强版
  9. lucene源码分析的一些资料
  10. Facebook图片存储系统Haystack——存小文件,本质上是将多个小文件合并为一个大文件来降低io次数,meta data里存偏移量...