Gen*_*нин 4 sql database sql-server indexing
在SQL Server Management Studio(SSMS)2008 R2开发桌上(因为我不能没有它)
--SET ANSI_NULL_DFLT_ON ON
create table B (Id int)
Run Code Online (Sandbox Code Playgroud)
我创造了独特的约束
ALTER TABLE B
ADD CONSTRAINT IX_B
UNIQUE (ID)
WITH (IGNORE_DUP_KEY = ON)
Run Code Online (Sandbox Code Playgroud)
SSMS显示我没有任何约束,但有一个键+索引,而上下文选项(右键单击)提示我创建(抱歉,脚本)仍然约束.

主要问题:
这里的关键是什么?
为什么需要这种约束?
为什么键被称为唯一约束(和唯一约束键)?
对不起,为什么键被索引调用?它们似乎有相同的名称(虽然我创建时没有明确的名称,但它们会以不同的方式调用)...
抱歉,再次......
COLLATERAL问题:
"唯一约束"与"唯一索引"之间的哪些功能有所不同?我今天搜索了一个单一的差异(想找到10)很长一段时间,找不到任何东西.
换句话说,什么是(为什么)概念(或构造)"唯一约束"和"唯一索引"在SQL Server中重复?
奖金问题(对于那些这个问题似乎过于简单的人):
在允许欺骗的独特指数(或唯一约束)中有什么意义?
insert into B VALUES (1)
insert into B VALUES (1)
insert into B VALUES (1)
Run Code Online (Sandbox Code Playgroud)
更新: 抱歉,谢谢,男女老少(奖金被撤销)
Update2:以前的SQL Server中"唯一索引"和"唯一约束"之间没有区别(我含糊地回忆起其中一个不允许NULL)?
Update3:真的,我总是生气(困惑)"外键约束"被"外键"调用,而它不是键和钥匙,外国人在另一张表中,外国人......而且只是发现这是普遍的混乱,对它发出嘎嘎声.至少,现在我记住我应该记得他的对手.
Update4:@Damien_The_Unbeliever,谢谢,
这些至少是一些记忆混乱的小事.
虽然,有些困惑:
为什么这些候选人默认不是NULL?
最初我真的想插入更短的脚本:
CREATE TABLE A(A INT UNIQUE);
Run Code Online (Sandbox Code Playgroud)
产生:
WTF这个PRIMARY和KEY的"候选人"有多重身份综合症,那么呢?
"UQ_"代表命名实践中的唯一约束吗?
现在,这个索引的脚本UQ__A__3214EC262AA05119产生无名...而不是索引...约束(?!):
ALTER TABLE [dbo].[A] ADD UNIQUE NONCLUSTERED
(
[ID] ASC
)
WITH
( PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON
[PRIMARY]
Run Code Online (Sandbox Code Playgroud)
WTheF - 如何将唯一索引识别为约束?在哪里,通过什么
密钥的脚本产生相同的!再次,约束......为什么它无名?为什么脚本不能作为"修改"而只能作为"创建"?!
这根本不符合逻辑!
现在如果要执行生成的脚本,有两个dupes,
再次执行 - 瞧:3个欺骗"候选人"

注意:如果通过单独的T-SQL语句与自定义/手动名称创建唯一约束,如我在顶部所做的那样,那么脚本不会产生匿名DML,并且它们的执行分别不允许"候选"的乘法
主键的奇怪候选人,不是吗?需要访问缩小(具有多个身份症状)?
UNIQUE约束也称为UNIQUE KEY约束.基本上,表可以有多个KEY.选择一个(有点任意)作为表的主键.其他键创建为UNIQUE KEY约束.
作为实现细节,通过在表中的相同列上放置UNIQUE索引来实现UNIQUE KEY约束.但是,可以在表上创建UNIQUE索引(通过CREATE INDEX),而不创建UNIQUE约束.
UNIQUE约束与PRIMARY KEY类似 - 它们可以是FOREIGN KEY约束的目标引用.UNIQUE索引本身不能这样引用.
在SSMS中,PRIMARY KEY,UNIQUE和FOREIGN KEY约束将始终显示在表的"Keys"文件夹下.CHECK和DEFAULT约束将显示在"Constraints"文件夹下