索引,约束

摘自MSDN:“CREATE INDEX (Transact-SQL)

         为指定表或视图创建关系索引,或为指定表创建 XML 索引。可在向表中填入数据前创建索引。可通过指定限定的数据库名称,为另一个数据库中的表或视图创建索引。

create index indexName on tableName(colName) with (options)

这样创建的为 non unique ,nonclustered 索引

        UNIQUE :为表或视图创建唯一索引。 唯一索引不允许两行具有相同的索引键值。视图的聚集索引必须唯一。 默认为non unique        CLUSTERED:创建索引时,键值的逻辑顺序决定表中对应行的物理顺序。聚集索引的底层(或称叶级别)包含该表的实际数据行。 一个表或视图只允许同时有一个聚集索引。有关详细信息,请参阅聚集索引结构。 如果没有指定 CLUSTERED,则创建非聚集索引。

        NONCLUSTERED :创建一个指定表的逻辑排序的索引。对于非聚集索引,数据行的物理排序独立于索引排序。有关详细信息,请参阅非聚集索引结构。

      无论是使用 PRIMARY KEY 和 UNIQUE 约束隐式创建索引,还是使用 CREATE INDEX 显式创建索引。每个表都最多可包含 249 个非聚集索引

      对于索引视图,只能为已定义唯一聚集索引的视图创建非聚集索引。

      默认值为 NONCLUSTERED。

 

摘自MSDN:“创建唯一索引

 摘自MSDN:“FOREIGN KEY 约束

  •       外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改表时可通过定义 FOREIGN KEY 约束来创建外键。
  •       在外键引用中,当一个表的列被引用作为另一个表的主键列时,就在两表之间创建了链接。这个列就成为第二个表的外键。

 摘自MSDN:“CHECK 约束

  •       通过限制列可接受的值,CHECK 约束可以强制域的完整性。此类约束类似于 FOREIGN KEY 约束,因为可以控制放入列中的值。但是,它们在确定有效值的方式上有所不同:FOREIGN KEY 约束从其他表获得有效值列表,而 CHECK 约束通过不基于其他列中的数据的逻辑表达式确定有效值。例如,可以通过创建 CHECK 约束将 salary 列中值的范围限制为从 $15,000 到 $100,000 之间的数据。这将防止输入的薪金值超出正常的薪金范围。     
  •       CHECK 约束不接受计算结果为 FALSE 的值。因为空值的计算结果为 UNKNOWN,所以表达式中存在这些值可能会覆盖约束。例如,假设对 intMyColumn 应用一个约束,指定 MyColumn 只能包含值 10(即 MyColumn = 10)。如果将值 NULL 插入到 MyColumn,SQL Server 2005 数据库引擎 将插入 NULL 且不返回错误。

 

      创建唯一索引可以确保任何生成重复键值的尝试都会失败。创建 UNIQUE 约束和创建与约束无关的唯一索引并没有明显的区别。进行数据验证的方式相同,而且对于唯一索引是由约束创建的还是手动创建的,查询优化器并不加以区分。但是,在进行数据集成时,应当对列创建 UNIQUE 约束。这可以使索引的目的更加明晰。

 

惟一索引可通过以下方式实现:

  • PRIMARY KEY 或 UNIQUE 约束

    在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创建唯一聚集索引。主键列不允许空值。

    在创建 UNIQUE 约束时,默认情况下将创建唯一非聚集索引,以便强制添加 UNIQUE 约束。如果不存在该表的聚集索引,则可以指定唯一聚集索引。

    有关详细信息,请参阅 PRIMARY KEY 约束和 UNIQUE 约束。
  • 独立于约束的索引

    可以为一个表定义多个唯一非聚集索引。

    有关详细信息,请参阅 CREATE INDEX (Transact-SQL)。
  • 索引视图

    若要创建索引视图,请对一个或多个视图列定义唯一聚集索引。视图的执行(具体化)和结果集的存储都是在索引叶级别进行的。结果集的存储方式与表数据在聚集索引中的存储方式相同。有关详细信息,请参阅创建索引视图。

摘自MSDN:“UNIQUE 约束

  •       可以使用 UNIQUE 约束确保在非主键列中不输入重复的值。尽管 UNIQUE 约束和 PRIMARY KEY 约束都强制唯一性,但想要强制一列或多列组合(不是主键)的唯一性时应使用 UNIQUE 约束而不是 PRIMARY KEY 约束。
  •       可以对一个表定义多个 UNIQUE 约束,但只能定义一个 PRIMARY KEY 约束。
  •      而且,UNIQUE 约束允许 NULL 值,这一点与 PRIMARY KEY 约束不同。不过,当与参与 UNIQUE 约束的任何值一起使用时,每列只允许一个空值。
  •       FOREIGN KEY 约束可以引用 UNIQUE 约束。

摘自MSDN:“PRIMARY KEY 约束

  •       表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。在创建或修改表时,您可以通过定义 PRIMARY KEY 约束来创建主键。
  •       一个表只能有一个 PRIMARY KEY 约束,并且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束可保证数据的唯一性,因此经常对标识列定义这种约束。
  •       如果为表指定了 PRIMARY KEY 约束,则 SQL Server 2005 数据库引擎 将通过为主键列创建唯一索引来强制数据的唯一性。当在查询中使用主键时,此索引还可用来对数据进行快速访问。因此,所选的主键必须遵守创建唯一索引的规则。
  •       如果对多列定义了 PRIMARY KEY 约束,则一列中的值可能会重复,但来自 PRIMARY KEY 约束定义中所有列的任何值组合必须唯一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值