zoukankan      html  css  js  c++  java
  • 唯一性约束和唯一性索引的区别

    “唯一性约束”和“唯一性索引”是不同的。

      一、 建立唯一性约束的语法,使用create table或者alter table

      1. 在字段级约束定义

    -- 命名 create table tmp_table ( a int constraint pk_tmp_table_a primary key, b varchar(10) constraint uq_tmp_table_b unique ) -- 不命名 create table tmp_table ( a int primary key, b varchar(10) unique )

      2. 在表约束定义

    -- 命名 create table tmp_table ( a int, b varchar(10), constraint pk_tmp_table_a primary key(a), constraint uq_tmp_table_b unique(b ASC) ) -- 不命名 create table tmp_table ( a int, b varchar(10), primary key(a), unique(b ASC) )

      二、 建立唯一性索引的语法,使用create index

    -- 必须命名 CREATE UNIQUE NONCLUSTERED INDEX xak_tmp_table_b ON tmp_table(b DESC) --不指定 [CLUSTERED | NONCLUSTERED],缺省为NONCLUSTERED(非聚集)

      三、当在表中创建主键约束或者唯一性键约束时,SQL Server自动创建一个唯一性索引

      这是以上脚本建立的约束:

    constraint_type constraint_name constraint_keys
    PRIMARY KEY (clustered) pk_tmp_table_a a
    UNIQUE (non-clustered) uq_tmp_table_b b


      这是索引:

    index_name index_description index_keys
    pk_tmp_table_a clustered, unique, primary key located on PRIMARY a
    uq_tmp_table_b nonclustered, unique, unique key located on PRIMARY b
    xak_tmp_table_b nonclustered, unique located on PRIMARY b(-)


      可以看出,为主键和唯一性约束自动建立了同名唯一性索引。如果现在为表建立了排序顺序相反的两个索引uq_tmp_table_b和xak_tmp_table_b,不知道数据库会怎么工作?

      四、题外话

      表级约束中可以指定列的排序顺序(col_name ASC | DESC),但不能指定列的NULL约束;字段级约束中可以指定列的NULL约束,但不能指定列的排序顺序。

  • 相关阅读:
    lucene 3.0.2 search 各种各样的Query类型
    lucene 3.0.2 中文分词
    java 文件读写
    java 从args[]中赋值和程序直接赋值不一样?
    java 中文转换成Unicode编码和Unicode编码转换成中文
    Java栈与堆一篇好文
    lucene 3.0.2 操作进阶
    Lucene实战(第2版)》
    java工程包的命名(-dev.jar,-javadoc.jar,jar)
    POJ 3304 Segments (线段和直线相交 + 思维)
  • 原文地址:https://www.cnblogs.com/wangchao928/p/2510859.html
Copyright © 2011-2022 走看看