创立和运用约束
约束(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]) 各参数说明如下: 例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 ] 各参数说明如下: 7.2.3 独一性约束 独一性约束指定一个或多个列的组合的值具有独一性,以防止在列中输入反复的值。独一性约束指定的列可以有NULL 属性。由于主关键字值是具有独一性的,因此主关键字列不能再设定独一性约束。独一性约束最多由16 个列组成。 定义独一性约束的语法如下: CONSTRAINT constraint_name UNIQUE [CLUSTERED | NONCLUSTERED] (column_name1[, 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 推荐使用缺省约束Mssq数据完整性约束,而不使用定义缺省值的方式来指定列的缺省值。有关绑定缺省约束的方法请参见“数据完整性”章节。 定义缺省约束的语法如下: CONSTRAINT constraint_name DEFAULT constant_expression [FOR column_name] 例7-7: constraint de_orde (编辑:瑞安网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |