日期:2014-05-16  浏览次数:20461 次

数据库中的五种约束

数据库中的五种约束及其添加方法
五大约束
1.—-主键约束(Primay Key Coustraint) 唯一性,非空性
 2.—-唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
 3.—-检查约束 (Check Counstraint) 对该列数据的范围、格式的限制(如:年龄、性别等)
 4.—-默认约束 (Default Counstraint) 该数据的默认值
 5.—-外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列

五大约束的语法示例
 1.—-添加主键约束(将stuNo作为主键)
 alter table stuInfo
 add constraint PK_stuNo primary key (stuNo)
 2.—-添加唯一约束(身份证号唯一,因为每个人的都不一样)
 alter table stuInfo
 add constraint UQ_stuID unique(stuID)
 3.—-添加默认约束(如果地址不填 默认为“地址不详”)
 alter table stuInfo
 add constraint DF_stuAddress default (‘地址不详’) for stuAddress
 4.—-添加检查约束 (对年龄加以限定 15-40岁之间)
 alter table stuInfo
 add constraint CK_stuAge check (stuAge between 15 and 40)

alter table stuInfo
 add constraint CK_stuSex check (stuSex=’男’ or stuSex=’女′)

5.—-添加外键约束 (主表stuInfo和从表stuMarks建立关系,关联字段stuNo)

alter table stuInfo
 add constraint FK_stuNo foreign key(stuNo)references stuinfo(stuNo)

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

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]
 注意:临时表不能指定外关键字约束。
惟一性约束
 惟一性约束指定一个或多个列的组合的值具有惟一性,以防止在列中输入重复的ࠆ