• Constraint5:unique 约束和null


    unique约束使用unique index来限制列值的唯一性;

    创建unique约束之后,column中允许插入null值,unique 约束将两个null值看作是相同的(即null=null为true),null和其他任何非null值都不相等。

    一,unique约束分为column level和table level,区别在于Table Level需要制定unique约束影响的column(or columns)。

    Column level的unique 约束语法

    复制代码
    column_name <data_type>
    
    [ CONSTRAINT constraint_name ] 
    { PRIMARY KEY | UNIQUE } 
            [ CLUSTERED | NONCLUSTERED ] 
            (column [ ASC | DESC ] [ ,...n ] )
            [ WITH FILLFACTOR = fillfactor 
            [ WITH ( <index_option>[ , ...n ] ) ]
    }
    复制代码


    Table level的unique 约束语法

    复制代码
    [ CONSTRAINT constraint_name ] 
    { 
        { PRIMARY KEY | UNIQUE } 
            [ CLUSTERED | NONCLUSTERED ] 
            (column [ ASC | DESC ] [ ,...n ] )
            [ WITH FILLFACTOR = fillfactor 
            [ WITH ( <index_option>[ , ...n ] ) ]
    }
    复制代码


    使用create table命令来创建unique 约束

    复制代码
    create table dbo.dt_test_unique
    (
    id int constraint UQ_id unique nonclustered,
    code int
    )
    
    create table dbo.dt_test_unique
    (
    id int ,
    code int,
    constraint UQ_id unique nonclustered(id)
    )
    复制代码

     二,在已经存在的表上

    create table dbo.dt_test_unique
    (
    id int ,
    code int
    )

    1,在已经存在的表上增加unique约束

    alter table dbo.dt_test_unique
    add constraint uq_test_id unique nonclustered(id)

    2,在已经存在的表上删除unique约束

    alter table dbo.dt_test_unique
    drop constraint uq_test_id

    3,在已经存在的表上修改unique约束

    在已经存在的表上修改unique约束,采用的workaround是先删除 unique约束,后增加unique约束

    alter table dbo.dt_test_unique
    drop constraint uq_test_id
    
    alter table dbo.dt_test_unique
    add constraint uq_test_id unique nonclustered(id)

    4,通过alter table 命令增加new column来增加 column level的unique 约束

    alter table dbo.dt_test_unique
    add datekey int
    constraint uq_test_datekey unique nonclustered

    推荐文档:

    http://www.cnblogs.com/kissdodog/archive/2013/05/31/3109509.html

    http://www.cnblogs.com/mybear/archive/2010/09/03/1816810.html

    参考文档:

    https://msdn.microsoft.com/en-us/library/ms190273(v=sql.110).aspx
    https://msdn.microsoft.com/en-us/library/ms188066(v=sql.110).aspx
    https://msdn.microsoft.com/en-us/library/ms187742(v=sql.110).aspx
    https://msdn.microsoft.com/zh-cn/library/ms174979.aspx

  • 相关阅读:
    POJ 2942 圆桌骑士 (点双学习笔记)
    洛谷P3563 POI Polarization
    通过集群的方式解决基于MQTT协议的RabbitMQ消息收发
    在WebAPI中调用其他WebAPI
    将WebAPI发布到本地服务器与远程服务器
    利用RabbitMQ、MySQL实现超大用户级别的消息在/离线收发
    C#程序调用cmd.exe执行命令
    C#调用python
    Trixbox下SIP TRUNK的基本设定
    连接两台asterisk服务器
  • 原文地址:https://www.cnblogs.com/wangsicongde/p/7551278.html
Copyright © 2020-2023  润新知