在表上的 SQL Server Management Studio (SSMS) 2008 R2 Dev(因为没有它我不能问)
--SET ANSI_NULL_DFLT_ON ON
create table B (Id int)
我创建唯一约束
ALTER TABLE B
ADD CONSTRAINT IX_B
UNIQUE (ID)
WITH (IGNORE_DUP_KEY = ON)
SSMS 显示我没有任何约束,而是有一个键 + 索引,而上下文选项(右键单击)提示我创建(对不起,脚本)仍然约束。
主要问题:
这里的 key 是什么?
为什么需要这个约束?
为什么唯一约束由键调用(以及由唯一约束调用的键)?
再次抱歉,为什么键会被索引调用?它们似乎具有相同的名称(尽管我在没有明确名称的情况下创建它们会以不同的方式调用)......
再次抱歉...
COLLATERAL问题:
“唯一约束”与“唯一索引”之间的哪些功能不同?我今天搜索了一个单一的差异(想找到 10 个),但找不到任何差异。
换句话说,什么是(为什么)概念(或构造)“唯一约束”和“唯一索引”在 SQL Server 中重复?
额外问题(对于那些觉得这个问题太简单的人):
允许欺骗的唯一索引(或唯一约束)有什么意义?
insert into B VALUES (1)
insert into B VALUES (1)
insert into B VALUES (1)
更新:对不起,谢谢,伙计们和女士们(奖金已撤回)
更新 2:以前的 SQL Server 中的“唯一索引”和“唯一约束”之间是不是有区别(我依稀记得其中一个不允许 NULL)?
更新 3:真的,我总是对“外键约束”被“外键”调用而感到生气(困惑),而它不是键,而键,外键在另一个表中,外键......只是发现这是普遍的困惑就可以了。至少,现在我记得我应该记得相反。
更新4:
@Damien_The_Unbeliever ,谢谢,
这些至少是为了记住困惑而作的一些努力。
尽管如此,一些困惑:
为什么这些候选默认情况下不是 NULL?
最初我真的想插入更短的脚本:
CREATE TABLE A(A INT UNIQUE);
产生了:
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]
WTheF-如何将唯一索引识别为约束?在哪里,通过什么
key 的脚本生成相同!再次,约束...
为什么是无名的?为什么不能将脚本编写为“修改”而只能编写为“创建”?!
这根本不符合逻辑!
现在如果要执行生成的脚本,有 2 个欺骗,
再次执行 - 瞧:3 个“候选人”
注意:如果像我在顶部所做的那样通过带有自定义/手动名称的单独 T-SQL 语句创建唯一约束,则脚本不会生成匿名 DML,并且它们的执行分别不允许“候选”的乘法
奇怪的主键候选,不是吗?需要访问收缩(具有多重身份症状)?
最佳答案
UNIQUE约束也称为UNIQUE KEY约束。基本上,一个表可以有多个 KEY。选择一个(有点随意)作为表的主键。其他键创建为 UNIQUE KEY 约束。
作为一个实现细节,UNIQUE KEY 约束是通过在表中的相同列上放置一个 UNIQUE 索引来实现的。但是,可以在表上创建 UNIQUE 索引(通过 CREATE INDEX),而无需创建 UNIQUE 约束。
UNIQUE约束与PRIMARY KEY相似-它们可以作为FOREIGN KEY约束的目标引用。 UNIQUE 索引本身不能被如此引用。
在 SSMS 中,PRIMARY KEY、UNIQUE 和 FOREIGN KEY 约束将始终显示在表的“Keys”文件夹下。 CHECK 和 DEFAULT 约束将显示在“Constraints”文件夹下
关于sql - 约束是关键是索引是约束?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3978680/