SQL创建和使用约束

SQL创建和使用约束
SQL创建和使用约束

创建和使用约束

日期:2005-12-4 14:41:58 来源:百当软件园

约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章)。在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。

7.2.1 主关键字约束

主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。

定义主关键字约束的语法如下:

CONSTRAINT constraint_name

PRIMARY KEY [CLUSTERED | NONCLUSTERED]

(column_name1[, column_name2,…,column_name16])

各参数说明如下:

constraint_name

指定约束的名称约束的名称。在数据库中应是惟一的。如果不指定,则系统会自动生成一个约束名。

CLUSTERED | NONCLUSTERED

指定索引类别,CLUSTERED 为缺省值。其具体信息请参见下一章。

column_name

指定组成主关键字的列名。主关键字最多由16 个列组成。

例7-3:创建一个产品信息表,以产品编号和名称为主关键字

create table products (

p_id char(8) not null,

p_name char(10) not null ,

price money default ,

quantity smallint null ,

constraint pk_p_id primary key (p_id, p_name)

) on [primary]

7.2.2 外关键字约束

外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联。这样,当在定义主关键字约束的表中更新列值,时其它表中有与之相关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新。外关键字约束的作用还体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字列值相同的值时,系统会拒绝插入数据。与主关键字相同,不能使用一个定义为TEXT 或IMAGE 数据类型的列创建外关键字。外关键字最多由16 个列组成。

定义外关键字约束的语法如下:

CONSTRAINT constraint_name

FOREIGN KEY (column_name1[, column_name2,…,column_name16])

REFERENCES ref_table [ (ref_column1[,ref_column2,…, ref_column16] )]

[ ON DELETE { CASCADE | NO ACTION } ]

[ ON UPDATE { CASCADE | NO ACTION } ] ]

[ NOT FOR REPLICATION ]

各参数说明如下:

REFERENCES

指定要建立关联的表的信息。

ref_table

指定要建立关联的表的名称。

ref_column

指定要建立关联的表中的相关列的名称。

ON DELETE {CASCADE | NO ACTION}

指定在删除表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值CASCADE,则在删除父表数据行时会将子表中对应的数据行删除;如果指定的是NO ACTION,则SQL Server 会产生一个错误,并将父表中的删除操作回滚。NO ACTION 是缺省值。

ON UPDATE {CASCADE | NO ACTION}

指定在更新表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值CASCADE,则在更新父表数据行时会将子表中对应的数据行更新;如果指定的是NO ACTION,则SQL Server 会产生一个错误,并将父表中的更新操作回滚。NO ACTION 是缺省值。

NOT FOR REPLICATION

指定列的外关键字约束在把从其它表中复制的数据插入到表中时不发生作用。

例7-4:创建一个订货表,与前面创建的产品表相关联

create table orders(

order_id char(8),

p_id char(8),

p_name char(10) ,

constraint pk_order_id primary key (order_id) ,

foreign key(p_id, p_name) references products(p_id, p_name)

) on [primary]

注意:临时表不能指定外关键字约束。

7.2.3 惟一性约束

惟一性约束指定一个或多个列的组合的值具有惟一性,以防止在列中输入重复的值。惟一性约束指定的列可以有NULL 属性。由于主关键字值是具有惟一性的,因此主关键字列不能再设定惟一性约束。惟一性约束最多由16 个列组成。

定义惟一性约束的语法如下:

CONSTRAINT constraint_name

UNIQUE [CLUSTERED | NONCLUSTERED]

(column_na me1[, column_name2,…,column_name16])

例7-5:定义一个员工信息表,其中员工的身份证号具有惟一性。

create table employees (

emp_id char(8),

emp_name char(10) ,

emp_cardid char(18),

constraint pk_emp_id primary key (emp_id),

constraint uk_emp_cardid unique (emp_cardid)

) on [primary]

7.2.4 检查约束

检查约束对输入列或整个表中的值设置检查条件,以限制输入值,保证数据库的数据完整性。可以对每个列设置符合检查。

定义检查约束的语法如下:

CONSTRAINT constraint_name

CHECK [NOT FOR REPLICATION]

(logical_expression)

各参数说明如下:

NOT FOR REPLICATION

指定检查约束在把从其它表中复制的数据插入到表中时不发生作用。

logical_expression

指定逻辑条件表达式返回值为TRUE 或FALSE。

例7-6:创建一个订货表其中定货量必须不小于10。

create table orders(

order_id char(8),

p_id char(8),

p_name char(10) ,

quantity smallint,

constraint pk_order_id primary key (order_id),

constraint chk_quantity check (quantity>=10) ,

) on [primary]

注意:对计算列不能作除检查约束外的任何约束。

7.2.5 缺省约束

缺省约束通过定义列的缺省值或使用数据库的缺省值对象绑定表的列,来指定列的缺省值。SQL Server 推荐使用缺省约束,而不使用定义缺省值的方式来指定列的缺省值。有关绑定缺省约束的方法请参见“数据完整性”章节。

定义缺省约束的语法如下:

CONSTRAINT constraint_name

DEFAULT constant_expression [FOR column_name]

例7-7:

constraint de_order_quantity default 100 for order_quantity

注意:不能在创建表时定义缺省约束,只能向已经创建好的表中添加缺省约束。

7.2.6 列约束和表约束

对于数据库来说,约束又分为列约束(Column Constraint)和表约束(Table Constraint)。列约束作为列定义的一部分只作用于此列本身。表约束作为表定义的一部分,可以作用于

多个列。

下面举例说明列约束与表约束的区别。

例7-8:

create table products (

p_id char(8) ,

p_name char(10) ,

price money default ,

quantity smallint check (quantity>=10) , /* 列约束*/

constraint pk_p_id primary key (p_id, p_name) /* 表约束*/

SQL建表语句约束

一、基础(建表、建约束、关系) 约束(constraint)是microsoft sql server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章)。在sql server 中有5 种约束:主关键字约束(primary key constraint)、外关键字约束(foreign key constraint)、惟一性约束(unique constraint)、检查约束(check constraint)和缺省约束(default constraint)。 (最后几页介绍sql基础约束) 1、说明:创建数据库 create database database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device use master exec sp_addumpdevice disk, testback, c:\mssql7backup\mynwind_1.dat --- 开始备份 backup database pubs to testback 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) --建表、建约束、关系 create table tableok ( col1 int, col2_notnull int not null, col3_default nchar(1) not null default(男), --默认男 col4_default datetime not null default(getdate()), --默认得到系统时间 col5_checkintnot null check(col5_check>=18 and col5_check<=55), --添加约束,数据值在18到55之间 col6_checknchar(9) not null check(col6_check like msd0902[0-9][^6-9]), --添加约束,数据值前7位必须是?msd0902?,倒数第两位可以是0-9中任意一个数字,最后一位不是6-9之间的数字。 cola_primary nchar(5) not null primary key, --建立主键 colb_unique int unique, --唯一约束 col7_identity int not null identity(100,1), --自增长,从100开始,每列值增加1个 col8_identity numeric(5,0) not null identity(1,1) --自增长,从1开始,每列值增加1个,最大值是5位的整数 col9_guid uniqueidentifier not null default(newid()) --使用newid()函数,随机获取列值 ) --alter

经典SQL语句大全_主外键_约束

一、基础(建表、建约束、关系) 约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章)。在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。 (最后几页介绍SQL基础约束) 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1. dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) --建表、建约束、关系 create table tableok ( col1 int, col2_notnull int not null, col3_default nchar(1) not null default('男'), --默认男 col4_default datetime not null default(getdate()), --默认得到系统时间 col5_check int not null check(col5_check>=18 and col5_check<= 55),--添加约束,数据值在18到55之间 col6_check nchar(9) not null check(col6_check like 'msd0902[0-9][^ 6-9]'), --添加约束,数据值前7位必须是‘msd0902’,倒数第两位可以是0-9中任意一个数字,最后一位不是6-9之间的数字。 cola_primary nchar(5) not null primary key, --建立主键 colb_unique int unique, --唯一约束 col7_Identity int not null identity(100,1), --自增长,从100开始,每列值增加1个

SQL约束讲解

SQL约束讲解 编辑人:星辰·樱 一.约束的类型 SQL Server 系统提供了6种约束类型,即not null非空约束,primary key主键约束,Foreign key外键约束,unique唯一约束,check检查约束和default 默认约束。 约束与完整性之间的关系 域完整性:default ,check。实体完整性:primary key ,unique。 参照完整性:foreign key。 二.定义约束的方式 定义约束可以使用create table语句或alter table语句完成。前者表示创建表的同时定义约束,后者表示在已有表中定义约束。 定义约束时,即可以所约束放在一个列上,也可以约束放在多个列上。前者称为列级约束,后者称为表级约束。 定义约束和修改约束时,要考虑以下几个因素: 1.不必删除表,就可以直接创建、修改表和删除约束的定义。 2.应该在应用程序中增加错误检查机制,测试数据是否与约束相冲突。 3.当在表上增加约束时,SQL Server系统将检查表中的数据是否与约束冲突。 4.一般情况,约束的名称应该符合,约束类型简名_表名_列名_代号这样的形式。 1.主键约束 主键约束用来强制数据的实体完整性,它是在表中定义一个主建来唯一标识表中的每行记录。 --T-SQL语句 Create table 表名 (列名数据类型constraint 主键约束名primary key [,···n] ---列级主键Constraint 主键约束名primary key (列名[,···n]) ---表级主键——alter table命令 Alter table 表名 Add constraint 列名primary key [clustered|nonclustered] {(列名[,···n])} ·clustered:表示在该列上建立聚集索引。 ·nonclustered:表示在该列上建立非聚焦索引。 2.NUIQUE约束 Unique约束主要用来限制表的非主键列中允许输入重复值,用来强调数据的

SQL Server外关键字约束的定义

SQL Server外关键字约束的定义 SQL Server外关键字约束的重要性不言而喻,下面就让我们一起来了解一下应该如何定义SQL Server外关键字约束. 兰州中研SQL Server外关键字约束定义了表之间的关系.当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联.这样,当在定义SQL Server主关键字约束的表中更新列值,时其它表中有与之相关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新.外关键字约束的作用还体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字列值相同的值时,系统会拒绝插入数据.与主关键字相同,不能使用一个定义为TEXT或IMAGE数据类型的列创建外关键字.外关键字最多由16个列组成. 定义外关键字约束的语法如下: CONSTRAINT constraint_name FOREIGN KEY(column_name1[,column_name2,…,column_name16]) REFERENCES ref_table[(ref_column1[,ref_column2,…,ref_column16])] [ON DELETE{CASCADE|NO ACTION}] [ON UPDATE{CASCADE|NO ACTION}]] [NOT FOR REPLICATION] 各参数说明如下: REFERENCES 指定要建立关联的表的信息. ref_table 指定要建立关联的表的名称. ref_column 指定要建立关联的表中的相关列的名称. ON DELETE{CASCADE|NO ACTION} 指定在删除表中数据时,对关联表所做的相关操作.在子表中有数据行与父表中的对应数

sql server约束

对于SQL Server中的约束,想必大家并不是很陌生。但是约束中真正的内涵是什么,并不是很多人都很清楚的。本文以详细的文字来介绍了什么是约束,以及如何在数据库编程中使用和使用这些约束,来达到更好的编程效果。(本文部分内容参考了SQL Server联机手册) 内容 数据完整性分类 实体完整性 域完整性 引用完整性 用户定义完整性 PRIMARY KEY约束 DEFAULT约束 CHECK约束 UNIQUE约束 FOREIGN KEY约束 正文 在数据库管理系统中,保证数据库中的数据完整性是非常重要的。所谓数据完整性,就是指存储在数据库中数据的一致性和正确性。约束定义关于列中允许值的规则,是强制完整性的标准机制。使用约束优先于使用触发器、规则和默认值。查询优化器也使用约束定义生成高性能的查询执行计划。 SQL Server联机丛书中,将数据完整性解释如下:“存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。”强制数据完整性可确保数据库中的数据质量。 例如,如果输入了employee_id 值为123 的职员,那么该数据库不应允许其他职员使用同一ID 值。如果计划将employee_rating 列的值范围设定为从1 到5,则数据库不应接受6。如果表有一dept_id 列,该列存储职员的部门编号,则数据库应只允许接受公司中的有效部门编号。 数据完整性分类 在SQL Server中,根据数据完整新措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种。

实体完整性 域完整性 引用完整性 用户定义完整性 SQL Server联机丛书中指明:“对表进行计划有两个重要步骤:标识列的有效值和确定如何强制列中的数据完整性。” 实体完整性 实体完整性简单的说,就是将表中的每一行看作一个实体。实体完整性要求表的标示符列或主键的完整性。可以通过建立唯一索引、PRIMARY KEY约束、UNIQUE约束,以及列的IDENTITY属性来实施实体完整性。 域完整性 域完整性是指给定列的输入有效性。要求表中指定列的数据具有正确的数据类型、格式和有效的数据范围。强制域有效性的方法有:限制类型(通过数据类型)、格式(通过CHECK 约束和规则)或可能值的范围。域完整性通过FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则来实现。 引用完整性 引用完整性又称参照完整性。引用完整性维持被参照表和参照表之间的数据一致性,他通过主键(PRIMARY KEY)约束和外键(FOREIGN KEY)约束来实现。引用完整性确保键值在所有表中一致。这样的一致性要求不能引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行一致的更改。在被参照表中,当其主键值被其他表所参照时,该行不能被删除也不允许改变。在参照表中,不允许参照不存在的主键值。 强制引用完整性时,SQL Server 禁止用户进行下列操作: 当主表中没有关联的记录时,将记录添加到相关表中。 更改主表中的值并导致相关表中的记录孤立。 从主表中删除记录,但仍存在和该记录匹配的相关记录。

sql约束例子

约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章)。在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。 7.2.1 主关键字约束 主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。 定义主关键字约束的语法如下: CONSTRAINT constraint_name PRIMARY KEY [CLUSTERED | NONCLUSTERED] (column_name1[, column_name2,…,column_name16]) 各参数说明如下: constraint_name 指定约束的名称约束的名称。在数据库中应是惟一的。如果不指定,则系统会自动生成一个约束名。 CLUSTERED | NONCLUSTERED 指定索引类别,CLUSTERED 为缺省值。其具体信息请参见下一章。 column_name 指定组成主关键字的列名。主关键字最多由16 个列组成。 例7-3:创建一个产品信息表,以产品编号和名称为主关键字 create table products ( p_id char(8) not null, p_name char(10) not null , price money default 0.01 , quantity smallint null , constraint pk_p_id primary key (p_id, p_name) ) on [primary] 7.2.2 外关键字约束 外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联。这样,当在定义主关键字约束的表中更新列值,时其它表中有与之相关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新。外关键字约束的作用还体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字列值相同的值时,系统会拒绝插入数据。与主关键字相同,不能使用一个定义为 TEXT 或IMAGE 数据类型的列创建外关键字。外关键字最多由16 个列组成。 定义外关键字约束的语法如下: CONSTRAINT constraint_name FOREIGN KEY (column_name1[, column_name2,…,column_name16]) REFERENCES ref_table [ (ref_column1[,ref_column2,…, ref_column16] )] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] ] [ NOT FOR REPLICATION ] 各参数说明如下: REFERENCES 指定要建立关联的表的信息。 ref_table 指定要建立关联的表的名称。 ref_column 指定要建立关联的表中的相关列的名称。 ON DELETE {CASCADE | NO ACTION}

SQL Server约束和触发器的区别

SQL Server约束和触发器的区别 作者:夏果果出处:博客2011-12-30 06:15 SQL Server约束相信大家都比较了解了,那么,SQL Server约束和触发器的区别在哪里呢…… SQL Server约束相信大家都比较了解了,那么,SQL Server约束和触发器的区别在哪里呢? 在SQL Server数据库中提供了两种主要机制来强制使用业务规则和数据完整性,他们是SQL Server约束和触发器。触发器其实就是一个特殊类型的存储过程,可在在执行某个操作时自动触发。触发器与约束都可以实现数据的一致性。那么他们在使用的过程中,有哪些差异呢?简单的来说,触发器可以实现约束的一切功能。但是在考虑数据一致性问题的时候,首先要考虑通过约束来实现。如果约束无法完成的功能,则再通过触发器来解决。两者从功能上来说,他们的关系如下图所示: 触发器可以包含使用SQL代码的复杂处理逻辑。如果单从功能上来说,触发器可以实现约束的所有功能。但是由于其自身的种种缺陷,其往往不是实现数据一致性等特定功能的首选解决方案。总的来说,只有在约束无法实现特定功能的情况下,才考虑通过触发器来完成。这只是在处理约束与触发器操作过程中的一个基本原则。对于他们两个具体的差异笔者在下面也进行了比较详细的阐述。欢迎大家进行补充。 差异一:错误信息的管理上。 当违反系统的SQL Server约束规则时,需要向用户返回一定的错误信息,方便用户进行排错。约束与触发器在遇到问题时都可以返回给用户一定的错误信息。但是,约束只能够通过标准化的系统错误信息来传递错误消息。如果应用程序需要使用自定义消息和较为复杂的错误处理机制,则必须要使用触发器才能够完成。如现在数据库中有一张产品信息表。为了保证产品的唯一性,要求产品的编号必须唯一。如果用户输入的产品编号跟企业现有的产

SQLServer中约束介绍

摘要 对于SQL Server中的约束,想必大家并不是很陌生。但是约束中真正的内涵是什么,并不是很多人都很清楚的。本文以详细的文字来介绍了什么是约束,以及如何在数据库编程中应用和使用这些约束,来达到更好的编程效果。(本文部分内容参考了SQL Server 联机手册) 内容 数据完整性分类 实体完整性 域完整性 引用完整性 用户定义完整性 PRIMARY KEY约束 DEFAULT约束 CHECK约束 UNIQUE约束 FOREIGN KEY约束 正文 在数据库管理系统中,保证数据库中的数据完整性是非常重要的。所谓数据完整性,就是指存储在数据库中数据的一致性和正确性。约束定义关于列中允许值的规则,是强制完整性的标准机制。使用约束优先于使用触发器、规则和默认值。查询优化器也使用约束定义生成高性能的查询执行计划。 SQL Server联机丛书中,将数据完整性解释如下:“存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。”强制数据完整性可确保数据库中的数据质量。 例如,如果输入了employee_id 值为123 的职员,那么该数据库不应允许其他职员使用同一ID 值。如果计划将employee_rating 列的值范围设定为从1 到5,则数据库不应接受6。如果表有一dept_id 列,该列存储职员的部门编号,则数据库应只允许接受公司中的有效部门编号。 数据完整性分类 在SQL Server中,根据数据完整新措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种。 实体完整性 域完整性 引用完整性 用户定义完整性

SQL Server 2005中创建约束的若干方法

SQL Server中创建约束的方法 约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件。 在SQL Server 中有5 种约束: 1.主关键字约束(Primary Key Constraint)、 2.外关键字约束(Foreign Key Constraint)、 3.惟一性约束(Unique Constraint)、 4.检查约束(Check Constraint)、 5.缺省约束(Default Constraint)。 1 主关键字约束 主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。 定义主关键字约束的语法如下: CONSTRAINT constraint_name PRIMARY KEY [CLUSTERED | NONCLUSTERED] (column_name1[, column_name2,…,column_name16]) 各参数说明如下: constraint_name 指定约束的名称约束的名称。在数据库中应是惟一的。如果不指定,则系统会自动生成一个约束名。 CLUSTERED | NONCLUSTERED 指定索引类别,CLUSTERED 为缺省值。其具体信息请参见下一章。 column_name 指定组成主关键字的列名。主关键字最多由16 个列组成。 例7-3:创建一个产品信息表,以产品编号和名称为主关键字 create table products ( p_id char(8) not null, p_name char(10) not null , price money default 0.01 , quantity smallint null , constraint pk_p_id primary key (p_id, p_name) ) on [primary]

Sql定义约束

Sql2005定义约束 为了保证输入数据的正确性,必须要在创建表的时候设置约束, 在这里简单的介绍一下如何设置约束. 需要注意的是,在用Management Studio创建约束的时候,在修改完后,都需要保存表以保存修改。 1. SQL Server中有五种约束,分别是 CHECK 约束, DEFAULE 约束,PRIMARY KEY 约束,FROEIGN KEY约束, UNIQUE 约束. (1) CHECK 约束 用来限制输入一列或者多列的值的范围,通过逻辑表达式来判断数据的有郊性,也就是一个列的输入内容必须满足CHECK约束条件,否则,数据无法正常输入,从而强制数据的域的完整性. (2) DEFAULT 约束 若在表中定义了DEFAULT约束,用户在插入新的数据时,如果该列没有指定数据,那么系统将默认值赋给该列,默认值也可以为空. (3) PRIMARY KEY 约束 在表中经常有一旬或多列的组合,其值能在唯一标识表中每一行. 这样的一列或多列成为表的主健(Primary Key),通过它可以强制表的实体完整性。一个表只能有一个主键,而且主键不能为空值。 (4) FOREIGN KEY 约束 外键(foreign key)是用于建立和加强两个表(主表与从表)的列或多列数据之间的连接的,当添加,修改或者删除数据时,通过参照完整性来保证它们之间的数据的一致性。先定义主键,再对从表定义外键约束。 (5)UNIQUE 约束 UNIQUE 约束用于确保表中的两个数据行在非主键中没有相同的列值,与PRIMARY KEY 约束类似,UNIQUE约束也强制唯一性,为表中的一列或多列提供实体完整性.但 UNIQUE用于非主键的一列或多列组合,且一个表可以定义多个UNIQUE约束. 2.约束的创建,查看,删除 即可以通过SQL SERVER Management Studio的“对象资源管理器”面板进行,

SQL中的CHECK约束的详细讲解

CHECK 约束(CHECK 约束:定义列中可接受的数据值。可以将CHECK 约束应用于多个列,也可以将多个CHECK 约束应用于单个列。当除去某个表时,也将除去CHECK 约束。)指定可由表中一列或多列接受的数据值或格式。例如,可以要求authors 表的zip 列只允许输入五位数的数字项。 可以为一个表定义许多CHECK 约束。可以使用"表"属性页创建、修改或删除每个CHECK 约束。 [attach]402[/attach] 1、将新的CHECK 约束附加到表或列 将CHECK 约束附加到表以指定一列或多列中可接受的数据值。 附加新的CHECK 约束 在数据库关系图中,右击包含约束的表,然后从快捷菜单中选择"约束"命令。 -或- 为将包含约束的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"约束"命令。 选择"新建"命令。"选定的约束"框显示由系统分配的新约束名。系统分配的名称以"CK_"开始,后跟表名。 在"约束表达式"框中,为CHECK 约束键入SQL 表达式。例如,若要将authors 表中state 列的输入项限制为New York,请键入: state = 'NY' 或者,若要要求zip 列中的输入项为5 位数字,请键入: zip LIKE '[0-9][0-9][0-9][0-9][0-9]' 中间不能有空格 若要给约束提供一个不同的名称,请在"约束名"框中键入名称。 用复选框控制何时强制约束: 若要在创建约束前对现有数据测试约束,请选中"创建中检查现存数据"复选框。 若要在该表中发生复制操作时强制约束,请选中"对复制强制约束"复选框。 若要在该表中插入或更新行时强制约束,请选中"对INSERT 和UPDATE 强制约束"复选框。

SQL各种约束总结

SQL Server 各种约束总结 NOT NULL 约束
Not null ,即不为空。 Not null 约束强制字段始终包含值。 这意味着, 如果不向字段添加值, 就无法插入新记录或者更新记录。 添加此约束有两种方法:
方法一
在表设计器中直接勾选即可。如下图:
方法二
SQL 语句添加约束。 CATE TABLE table_name( ATTRIBUTE Type NOT NULL; ); 点击新建查询,在查询界面中输入相应的 SQL 语句。

PRIMARY KEY 约束
primary key ,顾名思义,即主键,也称主码。在表中一行称一个元组,如果存在某个属 性或几个属性,其值能唯一标识表中的某一行,这样的一个属性或多个属性就能作为表的 primary key。 为一个表设置主码约束有以下三种方法: 若主键设置成功, 在相应的属性旁边会有一把小钥 匙。
方法一
直接右击所要设置的属性,选择设置主键。
方法二
选中要设置的属性,直接点击图箭头所指的小钥匙。

方法三
用 SQL 语言在设计表时同时添加约束。 CREATE TABLE table name( Attribute1 Type PRIMARY KEY, );
FOREIGN KEY
外键约束是用来加强两个表(主表和从表)的一列或多列数据之间的连接的。创建外键约 束的顺序是先定义主表的主键, 然后定义从表的外键。 也就是说只有主表的主键才能被从表 用来作为外键使用, 被约束的从表中的列可以不是主键, 主表限制了从表更新和插入的操作。
方法一
右键单击需要设置外键的列(此时的表是作为从表在外键中出现) ,选择关系。

SQL 身份证约束

因在数据库中设计一个字段,存储身份信息,网上找不到好的方法来不允许不合法的身份号码存储到记录中,编者只有自己写了一个只允许在数据库中输入合法身份证的约束,供大家参考 在设计身份证约束前,我们先设计出生日期的约束 首先,在表中建立一个字段,下面以IDCardNumber_Birthday为例,字段类型为nchar(8) 打开对象资源管理器,选择要设置约束的表展开,右键点击约束,选择新建约束 在CHECK约束界面,点击表达式右边的编辑按钮

将以下表达式复制到弹出编辑界面(记得将下列代码中IDCardNumber_Birthday替换为自己的字段名):

以上表达式将年约束在1900-2099之间,如不需此约束,请删去红色部分 下面身份证字段的约束设计,我们都知道,身份证的组成结构是6位地址码,接下来是8位出生日期,然后是3位随机序号(第3位单数为男,双数为女),最后1位校检位,我们先设计一个IDCradNumber字段,类型nchar(18)为避免出现不合法的出生日期,必须使用上面的出生日期约束,只需要将上面代码的substring()函数第二个参数的值加6(出生日期在6位地址码后面),再和校检表达式做AND运算即可

以上表达式,蓝色为增加的字符约束及身份证校检约束 为避免不合法的地址码出现在身份信息中,编者的建议是,将身份证字段拆分成两个字段,一部分存储地址码,一部分存储剩余的号码,再去下载地址码的Excel表(百度文库就有),再到数据库中建张新表,将地址编码导入到新表忠,然后把存储身份证信息的表建立外键参照新表的地址码,至于substring()函数的字符偏移量,就要读者自己去修改了

SQL Server 5种常见的约束

SQL Server 5种常见的约束 SQLServer 中有五种约束,Primary Key 约束、Foreign Key 约束、Unique 约束、Default 约束和Check 约束,用SQL Server2008 来演示下这几种约束的创建和使用的方法。 1、Primary Key 约束 在表中常有一列或多列的组合,其值能唯一标识表中的每一行。 这样的一列或多列成为表的主键(PrimaryKey)。一个表只能有一个主键,而且主键约束中的列不能为空值。只有主键列才能被作为其他表的外键所创建。 创建主键约束可以右键单击表,选择设计。 选中要创建主键的列,然后单击上面的小钥匙。 也可以右键需要创建主键的列,然后单击小钥匙。

2、Foreign Key 约束 外键约束是用来加强两个表(主表和从表)的一列或多列数据之间的连接的。创建外键约束的顺序是先定义主表的主键,然后定义从表的外键。也就是说只有主表的主键才能被从表用来作为外键使用,被约束的从表中的列可以不是主键,主表限制了从表更新和插入的操作。 右键单击需要设置外键的列(此时的表是作为从表在外键中出现),选择关系。 接下来点击添加--> 表和列规范。 在主键表中选择主表和主表的主键列。

设置完后保存即可。 3、Unique 约束 唯一约束确保表中的一列数据没有相同的值。与主键约束类似,唯一约束也强制唯一性,但唯一约束用于非主键的一列或者多列的组合,且一个表可以定义多个唯一约束。 右键单击要设置的列选择索引/ 键。 然后单击添加按钮。

选择需要设置的列,可以是一列也可以是多列的组合。 关闭并保存设置。

sql server中如何用代码增加约束最强文档

---添加主键约束
alter table 表名
add constraint 约束名primary key (主键)
---添加唯一约束
alter table 表名
add constraint 约束名unique (字段)
---添加默认约束
alter table 表名
add constraint 约束名default ('默认内容') for 字段
--添加检查check约束,要求字段只能在1到100之间
alter table 表名
add constraint 约束名check (字段between 1 and 100 )
---添加外键约束(主表stuInfo和从表stuMarks建立关系,关联字段为stuNo)
alter table 从表
add constraint 约束名
foreign key(关联字段) references 主表(关联字段)
GO
sql server中删除约束的语句是:
alter table 表名drop constraint 约束名
sp_helpconstraint 表名找到数据表中的所有列的约束

-----------在创建表时创建约束------------
7.2.1 主关键字约束
主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。
定义主关键字约束的语法如下:
CONSTRAINT constraint_name
PRIMARY KEY [CLUSTERED | NONCLUSTERED]
(column_name1[, column_name2,…,column_name16])
各参数说明如下:


constraint_name
指定约束的名称约束的名称。在数据库中应是惟一的。如果不指定,则系统会自动生成一个约束名。
CLUSTERED | NONCLUSTERED
指定索引类别,CLUSTERED 为缺省值。其具体信息请参见下一章。
column_name
指定组成主关键字的列名。主关键字最多由16 个列组成。

例7-3:创建一个产品信息表,以产品编号和名称为主关键字

sql server约束

对于SQLServer中的约束,想必大家并不是很陌生。但是约束中真正的内涵是什么,并不是很多人都很清楚的。本文以详细的文字来介绍了什么是约束,以及如何在数据库编程中应用和使用这些约束,来达到更好的编程效果。(本文部分内容参考了SQL Server联机手册) 内容 数据完整性分类 实体完整性 域完整性 引用完整性 用户定义完整性 PRIMARY KEY约束 DEFAULT约束 CHECK约束 UNIQUE约束 FOREIGNKEY约束 正文 在数据库管理系统中,保证数据库中的数据完整性是非常重要的。所谓数据完整性,就是指存储在数据库中数据的一致性和正确性。约束定义关于列中允许值的规则,是强制完整性的标准机制。使用约束优先于使用触发器、规则和默认值。查询优化器也使用约束定义生成高性能的查询执行计划。 SQLServer联机丛书中,将数据完整性解释如下:“存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。”强制数据完整性可确保数据库中的数据质量。 例如,如果输入了employee_id 值为123的职员,那么该数据库不应允许其他职员使用同一ID值。如果计划将employee_rating 列的值范围设定为从1到5,则数据库不应接受6。如果表有一dept_id 列,该列存储职员的部门编号,则数据库应只允许接受公司中的有效部门编号。 数据完整性分类 在SQL Server中,根据数据完整新措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种。

实体完整性 域完整性 引用完整性 用户定义完整性 SQLServer联机丛书中指明:“对表进行计划有两个重要步骤:标识列的有效值和确定如何强制列中的数据完整性。” 实体完整性 实体完整性简单的说,就是将表中的每一行看作一个实体。实体完整性要求表的标示符列或主键的完整性。可以通过建立唯一索引、PRIMARYKEY约束、UNIQUE约束,以及列的IDENTITY属性来实施实体完整性。 域完整性 域完整性是指给定列的输入有效性。要求表中指定列的数据具有正确的数据类型、格式和有效的数据范围。强制域有效性的方法有:限制类型(通过数据类型)、格式(通过CHECK约束和规则)或可能值的范围。域完整性通过FOREIGN KEY 约束、CHECK约束、DEFAULT定义、NOT NULL 定义和规则来实现。 引用完整性 引用完整性又称参照完整性。引用完整性维持被参照表和参照表之间的数据一致性,他通过主键(PRIMARY KEY)约束和外键(FOREIGN KEY)约束来实现。引用完整性确保键值在所有表中一致。这样的一致性要求不能引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行一致的更改。在被参照表中,当其主键值被其他表所参照时,该行不能被删除也不允许改变。在参照表中,不允许参照不存在的主键值。 强制引用完整性时,SQLServer 禁止用户进行下列操作: 当主表中没有关联的记录时,将记录添加到相关表中。 更改主表中的值并导致相关表中的记录孤立。 从主表中删除记录,但仍存在与该记录匹配的相关记录。

SQL创建和使用约束

创建和使用约束 日期:2005-12-4 14:41:58 来源:百当软件园 约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章)。在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。 7.2.1 主关键字约束 主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。 定义主关键字约束的语法如下: CONSTRAINT constraint_name PRIMARY KEY [CLUSTERED | NONCLUSTERED] (column_name1[, column_name2,…,column_name16]) 各参数说明如下: constraint_name 指定约束的名称约束的名称。在数据库中应是惟一的。如果不指定,则系统会自动生成一个约束名。 CLUSTERED | NONCLUSTERED 指定索引类别,CLUSTERED 为缺省值。其具体信息请参见下一章。 column_name 指定组成主关键字的列名。主关键字最多由16 个列组成。 例7-3:创建一个产品信息表,以产品编号和名称为主关键字 create table products ( p_id char(8) not null, p_name char(10) not null , price money default 0.01 , quantity smallint null , constraint pk_p_id primary key (p_id, p_name) ) on [primary] 7.2.2 外关键字约束 外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联。这样,当在定义主关键字约束的表中更新列值,时其它表中有与之相关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新。外关键字约束的作用还体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字列值相同的值时,系统会拒绝插入数据。与主关键字相同,不能使用一个定

SQL语句---创建表(约束的用法)

SQL语句---创建表(约束的用法) 本文源自:SQL语句---创建表- 轻轻浪花- 博客频道- https://www.360docs.net/doc/c617560583.html, https://www.360docs.net/doc/c617560583.html,/Qingqinglanghua/article/details/5051563-------------------------------------------------------------------------------------------------------------------------------1.定义基本表语句 语法:USE 数据库名CREATE TABLE 表名(列名类型(大小) DEFAULT'默认值', 列名类型(大小) DEFAULT'默认值', 列名类型(大小) DEFAULT'默认值 ', ... ...); 注:绿色部份是可以省略的。例:CREATE TABLE S (SNO char(2), SNAME char(8), AGE decimal(2), SEX char(2) DEFAULT'男', DEPT char(2)); 创建了一个五列的表,其中第四列的默认值为'男’。 --------------------------------------------------------------------------------2.定义完整性约束语法:USE 数据库名CREATE TABLE 表名(列名类型(大小) DEFAULT'默认值' CONSTRAINT 约束名约束定义, 列名类型(大小) DEFAULT'默认值' CONSTRAINT 约束名约束定义,

sql _约束

SQL Server 2005 联机丛书 ALTER TABLE (Transact-SQL) 发送反馈 请参阅 全部折叠全部展开语言筛选器: 全部语言筛选器: 多语言语言筛 选器: Visual Basic语言筛选器: C#语言筛选器: C++语言筛选器: J#语言筛选器: JScript 通过更改、添加或删除列和约束,重新分配分区,或者启用或禁用约束和触发器,从而修改表的定义。 Transact-SQL 语法约定 语法 ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name { ALTER COLUMN column_name { [ type_schema_name. ] type_name [ ( { precision [ , scale ] | max | xml_schema_collection } ) ] [ NULL | NOT NULL ] [ COLLATE collation_name ] | {ADD | DROP } { ROWGUIDCOL | PERSISTED } } | [ WITH { CHECK | NOCHECK } ] ADD { | |

} [ ,...n ] | DROP { [ CONSTRAINT ] constraint_name [ WITH ( [ ,...n ] ) ] | COLUMN column_name } [ ,...n ] | [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT { ALL | constraint_name [ ,...n ] } | { ENABLE | DISABLE } TRIGGER { ALL | trigger_name [ ,...n ] } | SWITCH [ PARTITION source_partition_number_expression ] TO [ schema_name. ] target_table [ PARTITION target_partition_number_expression ] } [ ; ] ::= { MAXDOP = max_degree_of_parallelism | ONLINE = {ON | OFF } | MOVE TO { partition_scheme_name ( column_name ) | filegroup | "default"} } 备注 若要添加新数据行,请使用INSERT。若要删除数据行,请使用DELETE或TRUNCATE TABLE。若要更改现有行中的值,请使用UPDATE。 如果过程缓存中存在引用表的执行计划,ALTER TABLE 会将这些执行计划标记为下次执行时重新编译。

相关主题
相关文档
最新文档