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

时间: 2024-10-18 18:40:27

unique 约束和null的相关文章

SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束

CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, .... ) 数据类型(data_type)规定了列可容纳何种数据类型.下面的表格包含了SQL中最常用的数据类型: 数据类型 描述 integer(size) int(size) smallint(size) tinyint(size) 仅容纳整数.在括号内规定数字的最

SQL语句建表、设置主键、外键、check、default、unique约束

· 什么是数据库? 存放数据的仓库. · 数据库和数据结构有什么区别? 数据结构要解决在内存中操作数据的问题,数据库要解决在硬盘中操作数据的问题.数据结构研究一些抽象数据模型(ADT)和以及定义在该模型上的一些操作,数据库是由表.关系.操作组成. · 什么是主键? 主键用来标识记录的唯一性. · 什么是外键? 外键用来标识表与表之间的联系. · 什么是check约束? check约束限制了输入值的范围. · 什么是default约束? 给某个属性一个默认值. · 什么是unique约束? 限制某

oracle的unique约束

unique约束是指唯一约束,用于要求列种不允许出现重复值.可以为单独的列添加一个unique约束,也可以为多个列添加一个unique约束(属于表级约束).如果为多个列添加一个unique约束,只需要保证这多个列的值不会全部相同即可. 在创建表时,为列添加unique约束,形式如下: column_name data_type [constraint constraint_name] unique或 create table table_name( column_name data_type,[

SQLServer之UNIQUE约束

原文:SQLServer之UNIQUE约束 UNIQUE约束添加规则 1.唯一约束确保表中的一列数据没有相同的值. 2.与主键约束类似,唯一约束也强制唯一性,但唯一约束用于非主键的一列或者多列的组合,且一个表可以定义多个唯一约束. 使用SSMS数据库管理工具添加UNIQUE约束 1.连接数据库,选择数据库,选择数据表->右键点击->选择设计. 2.在表设计窗口中->选择要添加约束的数据列->右键点击->选择索引/键. 3.在索引/键窗口中->点击添加. 4.选择新增的索

SQL UNIQUE 约束

UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证. PRIMARY KEY 拥有自动定义的 UNIQUE 约束. 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束. SQL UNIQUE Constraint on CREATE TABLE 下面的 SQL 在 "Persons" 表创建时在 "Id_P" 列创建 UNIQUE 约束: My

mySQL 约束 (Constraints):一、非空约束 NOT NULL 约束

非空约束 NOT NULL 约束: 强制列不能为 NULL 值,约束强制字段始终包含值.这意味着,如果不向字段添加值,就无法插入新记录或者更新记录. 1.在 "Persons" 表创建时在 Id列.name列创建 not null 约束: create table Persons(id int not NULL,p_name varchar(20) not null, deparment varchar(20),address varchar(20),telNum varchar(20

postgresql----数据库表的约束----NOT NULL,DEFAULT,CHECK

数据库表有NOT NULL,DEFAULT,CHECK,UNIQUE,PRIMARY KEY,FOREIGN KEY六种约束. 一.NOT NULL ---- 非空约束 NULL表示没有数据,不表示具体的数值,所以在数据库中NULL是不等于NULL的.判断表中的一个单元格是不是NULL使用的是IS NULL或者IS NOT NULL,而不是=NULL或者!=NULL,当一个字段设置NOT NULL约束后,INSERT时必须给该字段赋值,否则拒绝写入.在一些程序语言(如C)查询结果中出现NULL有

MYSQL约束 -- not null 非空约束

2.not null 非空约束 用于确保当前列的值不为空:在创建表时,如果不指定是否可以为空,字段默认可以为NULL. -- 这是上一篇默认约束创建的表 CREATE TABLE `test`.`user`( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `name` VARCHAR(225) NOT NULL COMMENT '姓名', -- 这里添加了NOT NULL `sex` TINYINT(1) DEFAULT 1 COMMENT

索引的优点和缺点

一.为什么要创建索引呢(优点)?这是因为,创建索引可以大大提高系统的性能.第一,   通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.第二,   可以大大加快数据的检索速度,这也是创建索引的最主要的原因.第三,   可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义.第四,   在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间.第五,   通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能. 二.建立方向索引的不利因素(缺点)也