zoukankan      html  css  js  c++  java
  • SQLServer之UNIQUE约束

    UNIQUE约束添加规则

    1、唯一约束确保表中的一列数据没有相同的值。

    2、与主键约束类似,唯一约束也强制唯一性,但唯一约束用于非主键的一列或者多列的组合,且一个表可以定义多个唯一约束。

    使用SSMS数据库管理工具添加UNIQUE约束

    1、连接数据库,选择数据库,选择数据表-》右键点击-》选择设计。

    2、在表设计窗口中-》选择要添加约束的数据列-》右键点击-》选择索引/键。

    3、在索引/键窗口中-》点击添加。

    4、选择新增的索引/键-》在常规窗口中-》类型选择唯一键。

    5、在常规窗口中-》点击列。

     

    6、在索引列窗口中-》先选择约束列-》然后选择约束列排序规则-》点击确定。

    7、在索引/键弹出框中常规窗口中-》在名称中输入约束名称-》在说明中输入约束描述-》其他可以选择默认-》点击关闭。

    8、点击保存按钮(或者ctrl+s)-》刷新表,查看结果。

     使用T-SQL脚本添加UNIQUE约束

    当表结构已存在时

    给一列或者多列添加唯一约束时,先判断要添加的约束是否存在,如果存在则先删除再添加,如果不存在则直接添加。

    语法:

    if exists(select * from sysobjects where name=约束名)
    alter table 数据库名.[dbo].表名 drop constraint 约束名;
    go
    alter table 数据库名.[dbo].表名 add constraint 约束名 unique(列名1,列名2);
    go

    示例:

    if exists(select * from sysobjects where name='unique_t_name')
    alter table [testss].[dbo].[test1] drop constraint unique_t_name;
    go
    alter table [testss].[dbo].[test1] add constraint unique_t_name unique(name,sex);
    go

    当表结构不存在时

    当表结构不存在时,需要在建表语句中添加,添加一列唯一索引和多列唯一索引语法相同。

    语法:

    --当表结构不存在时添加唯一约束
    if exists( select * from sysobjects where name=数据库名.[dbo].表名 and type ='U')
    drop table 数据库名.[dbo].表名;
    go

    --当表结构不存在时
    --建表语法声明
    create table 数据库名.[dbo].表名
    (
    --字段声明
    列名1 int identity(1,1) not null,
    列名2 nvarchar(50) null,
    列名3 int not null,
    primary key clustered(列名1 asc) with(ignore_dup_key=off) on [primary], --主键索引声明
    constraint unique_name_sex unique(列名2,列名3)
    )on [primary]

    --字段注释声明
    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'描述1' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名1';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'描述2' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名2';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'描述3' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名3';
    go

    示例:

    --当表结构不存在时添加唯一约束
    if exists( select * from sysobjects where name='test1'and type ='U')
    drop table test1;
    go

    --当表结构不存在时
    --建表语法声明
    create table test1
    (
    --字段声明
    id int identity(1,1) not null,
    name nvarchar(50) null,
    age int not null,
    primary key clustered(id asc) with(ignore_dup_key=off) on [primary], --主键索引声明
    constraint unique_name_sex unique(name,age)
    )on [primary]

    --字段注释声明
    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'id主键' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'id';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'name';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年龄' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'age';
    go

    UNIQUE索引优缺点

    优点:

    1、唯一性约束所在的列允许空值。

    2、可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的。

     3、唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。

    缺点:

    1、创建唯一约束时会创建索引,占用磁盘空间。

    2、插入或者修改约束列的值时,会存在校验规则,会比较费事。

  • 相关阅读:
    FZU 2105 (线段树)
    HDU 4903 (模拟+贪心)
    Codeforces Beta Round #91 (Div. 1 Only) E. Lucky Array
    HDU 3308 (线段树区间合并)
    POJ 3667(线段树区间合并)
    线段树题集 (cf版)
    HDU 4902 (牛叉的线段树)
    20150204--JS巩固与加强2-01
    20150203+JS巩固与加强1-02
    20150203+JS巩固与加强1-01
  • 原文地址:https://www.cnblogs.com/vuenote/p/9573272.html
Copyright © 2011-2022 走看看