constraint

一,Constraint 是表定义的一部分,用于实现数据完整性。

Data Integrity 由三种类型的constraint实现:

Entity Integrity:数据是唯一的。约束: primary key, unique

Domain integrity:data value符合criteria。约束:check,default

Referential integrity:引用的数据必须存在或联动更新。约束:foreign key

二,constraint是database object,所有的contraint name不能重复,必须是唯一的。共有五种类型:primary key,unique,check,default,foreign key,Each contraint has its own row in the sys.objects catalog view.

create table dbo.dt_test
(
id int identity not null constraint PK_ID primary key,
code int,
name varchar(11)
)

create table dbo.dt_test_add
(
id int identity not null constraint PK_ID check(id>0),
code int,
name varchar(11)
)

Msg 2714, Level 16, State 5, Line 1
There is already an object named ‘PK_ID‘ in the database.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.

通过sys.objects 查看constraint object的信息,每一个constraint object 都必须依附在parent object,也就是一个base table上。

--C = CHECK constraint
--D = DEFAULT (constraint or stand-alone)
--F = FOREIGN KEY constraint
--PK = PRIMARY KEY constraint
--UQ = UNIQUE constraint 

select NAME,object_id,schema_id,object_name(parent_object_id) as parent_object_name,type,type_desc
from sys.objects
where type in(‘C‘,‘D‘,‘F‘,‘PK‘,‘UQ‘)

三,跟约束有关的两个column properties 是 Identity和 nullability。

when you use the select into command to make a copy of a table, all column names and data types are copied, as well as Identity and nullability, but constraints are not copied to the new table.

四,约束的定义分为两种: table level 和 column level

参考:CREATE TABLE (Transact-SQL)

https://msdn.microsoft.com/zh-cn/library/ms174979(v=sql.120).aspx

五,约束的默认行为

Primary key 约束和unique 约束都会创建一个unique index,Primary key 约束默认创建clustered unqiue index,Unique 约束默认创建nonclustered unique index,索引类型可以通过关键字 clustered 或nonclustered 来修改。

<column_constraint> ::=
[ CONSTRAINT constraint_name ]
{     { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]

}

PRIMARY KEY   

Is a constraint that enforces entity integrity for a specified column or columns through a unique index. Only one PRIMARY KEY constraint can be created per table.

UNIQUE 

Is a constraint that provides entity integrity for a specified column or columns through a unique index. A table can have multiple UNIQUE constraints.

CLUSTERED | NONCLUSTERED   

Indicate that a clustered or a nonclustered index is created for the PRIMARY KEY or UNIQUE constraint. PRIMARY KEY constraints default to CLUSTERED, and UNIQUE constraints default to NONCLUSTERED.

In a CREATE TABLE statement, CLUSTERED can be specified for only one constraint. If CLUSTERED is specified for a UNIQUE constraint and a PRIMARY KEY constraint is also specified, the PRIMARY KEY defaults to NONCLUSTERED.

Primary key和Unique的区别是

1.primary key 约束不允许有null值,作为Primary Key 约束的columns 必须是not null;而unique 约束允许有一个null值,在unqieu约束中,null值被认为是相同的,作为unique 约束的columns 可以是null 或 not null。在unique 约束中, (null,A)和(null, null)是不同的,但是(null,null)和(null,null)是相同的。

2.Primary key 约束只能有一个,而unique 约束可以有多个。

3.设计逻辑不同,primary key用于唯一标识表中列,而unique 约束表示数据在table中是唯一的。一个强调的是标识,一个强调的是唯一性。

六,constraint检查的顺序十分重要,一般是按照如下顺序来进行check的。

1, defaut

2, not null

3, check

4,foreigh key

5, unique and primary key

6, trigger fire

时间: 2024-11-19 09:48:59

constraint的相关文章

微软BI 之SSIS 系列 - Precedence Constraint 详解优先约束的使用

开篇介绍 Precedence Constraint 优先约束 - 在控制流中使用,用来链接控制流中各种 Task,Container,并且要求满足一定的条件才能执行相关联的 Task 或者 Container. 比如下图中,第一个 Execute SQL Task 叫做 Precedence-Executable 优先可执行任务,而Script Task 由于在关联箭头的下游,所以它叫做 Constrained-Executable 受约束可执行任务.关联箭头的上游任务自然先执行,关联箭头下方

导入项目的时候报错Error:Could not find com.android.support.constraint:constraint-layout:1.0.0-alpha7

问题描述 今天在导入项目的时候报错: Error:Could not find com.android.support.constraint:constraint-layout:1.0.0-alpha7. 原因是:没有下载相应版本的ConstraintLayout. 解决方案 工具栏上选择 Tools --> Android -->SDK Manager 切换到SDK Tools选项,在右下角处勾选 Show Package Details 在Support Repository下的Const

(转载)SQL基础--&gt; 约束(CONSTRAINT)

感谢Leshami的分享,原文地址:http://blog.csdn.net/leshami/article/details/5711367 --============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完整性 实体完整性:表中记录不重复(任何两条记录不全等)并且每条记录都有一个非空主键 域完整性:表中字段值必须与字段数据类型.格式.有效范围相吻合 参照完整性:不能引

05 外键中的Cascading属性(Cascading referential integraty constraint)

上文中讲到外键约束的作用,tblPerson表中的GenderId是外键,tblGender中的Id是主键.通过设置外键约束可以限制tblPerson中的GenderId的值限定在tblGender表中的Id的取值范围.如下表中所示tblGender中的数据: Id Gender 1 Male 2 Female 3 Unknown 那么tblPerson表中的GenderId列的取值就只能是1.2.3 Id Name Email GenderId Address 1 John [email pr

Auto Layout Guide----(三)-----Anatomy of a Constraint

Anatomy of a Constraint 剖析约束 The layout of your view hierarchy is defined as a series of linear equations. Each constraint represents a single equation. Your goal is to declare a series of equations that has one and only one possible solution. A samp

为列增加默认值限制(Adding a default constraint)

我们可以为表中的某一列增加一个默认值,如上文中我们创建了tblPerson表,该表有GenderId列.我们可以使用下面的代码为该列增加默认值: Alter Table tblPerson Add Constraint DF_tblPerson_GenderId Default 3 For GenderId 同时我们也可以在为表增加新列的时候指定默认值,下面的代码为tblPerson增加一个地址列Address,同时为该地址指定了默认值"CHONGQING": Alter Table

SQL基础--&gt; 约束(CONSTRAINT)

一.几类数据完整性 实体完整性:表中记录不重复(任何两条记录不全等)并且每条记录都有一个非空主键 域完整性:表中字段值必须与字段数据类型.格式.有效范围相吻合 参照完整性:不能引用不存在的值 自定义完整性:根据特定业务领域定义的需求完整性 保证数据完整性的几种常用方法 约束(最常用) 过程 函数 触发器 实体完整性:primary key.unique.索引(index) 域完整性:check.foreign key.not null.数据类型 参照完整性:foreign key 自定义完整性:

sql中constraint主要是增加约束

这个主要就是增加约束的以下几种约束 .并 一一列举:1.主键约束: 主键约束:就是对一个列进行了约束,约束为(非空.不重复) 要对一个列加主键约束的话,这列必须满足条件非空,这样才可以约束 以下是代码   要对一个列加主键,列名为id,表名为emp格式为: alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)例子: alter table emp add constraint ppp primary key (id)—————————————————

java.lang.LinkageError: loader constraint violation: when resolving interface method

异常:java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/Expression...... jbpm4 在tomcat6 下面ssh2 这个错误!原因是项目中WEB-INF/lib中的三个jar包(juel.jar, juel-engi

VS 2012 No exports were found that match the constraint 解决办法

VS 2012 No exports were found that match the constraint 解决办法 删除C:\Users\你的用户名\AppData\Local\Microsoft\VisualStudio\11.0 这里面的全部文件 文章出处:http://blog.luobotou.org/vs-2012-no-exports-were-found-that-match-the-constraint/