为什么 INDEX 创建语句有 UNIQUE 参数?
据我了解,非聚集索引包含一个书签,一个指向行的指针,它应该是唯一的,以区分甚至非唯一的行,
那么确保非聚集索引是唯一的?
正确的?
那么,我是否理解非唯一索引只能在聚集表上?自从
由于“聚集索引的底部或叶级包含表的实际数据行”[1],我是否正确理解,通过对(可能是所有或表 [2] 的一部分)列?
那么,什么给索引带来了UNIQUE参数呢?
除了基本概念定义的混淆之外 [3]
Update:
这又是同样的陷阱——根据未定义的术语解释已经解释过很多次的东西,将所有解释转化为永无休止的猜测游戏。
请参阅我的子问题 [4],它实际上是对同一问题的重新措辞。
Update2:
问题在于含糊不清、缺乏定义或在不适当的上下文中使用不当的术语。如果索引被定义为用于(查找和)识别/指向真实数据的结构,则非唯一或 NULL 索引没有任何意义。再见
Cited:
[1]
创建索引 (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms188783.aspx
[2]
创建表 (Transact-SQL)http://msdn.microsoft.com/en-us/library/ms174979.aspx
[3]
唯一索引还是唯一键?
唯一索引还是唯一键?
[4]
什么是索引,非聚集索引可以是非唯一的吗?
什么是索引,非聚集索引可以是非唯一的吗?
虽然非唯一索引足以区分行(正如您所说),UNIQUE
索引充当约束:它将防止重复项输入到数据库中 - 其中“重复项”是索引列中包含相同数据的行。
Example:
Firstname | Lastname | Login
================================
Joe | Smith | joes
Joe | Taylor | joet
Susan | Smith | susans
我们假设默认情况下,登录名是根据名字 + 姓氏的第一个字母生成的。
当我们尝试将 Joe Sciavillo 添加到数据库时会发生什么?通常,系统会很乐意生成登录名joes
并插入(Joe,Sciavillo,joes)
。现在我们有两个用户具有相同的用户名 - 可能是一件坏事。
现在假设我们有一个UNIQUE
索引于Login
列 - 在允许插入新行之前,数据库将检查是否存在具有相同数据的其他行。换句话说,尝试插入另一个joes
将被拒绝,因为该数据在该行中不再是唯一的。
当然,您可以在多个列上拥有唯一索引,在这种情况下组合数据必须是唯一的(例如,唯一索引Firstname,Lastname
会很高兴地接受争吵(Joe,Badzhanov)
,因为该组合尚未出现在表中,但会拒绝第二行(Joe,Smith)
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)