1、数据完整性 之域完整性的实现(2),域完整性的实现,实现域完整性通过 CHECK约束 规则 默认值约束 默认值对象,默认值约束及默认值对象,可以为字段定义默认值,方便用户的使用。通过两种方式实现: (1)在创建表或修改表时,定义默认值约束。 (2)先定义默认值对象,然后将该对象绑定到表的相应字段。,默认值约束,1默认值约束的定义及删除 (1)定义 方法一:通过企业管理器实现 方法二:SQL语句实现创建表时定义一个字段的默认值约束 CREATE TABLE table_name /*指定表名 (column_name datatype NOT NULL | NULL DEFAULT constr
2、aint_expression /*默认值约束 ,n) 说明: constraint_expression表达式为默认值约束表达式,此表达式只能是常量、系统函数或NULL。对于timestamp或带IDENTITY属性的字段不能定义默认值约束。 课外阅读:,【例】在创建表时定义一个字段的默认值约束。,在定义默认值约束的同时指定约束名。 USE XS CREATE TABLE XSDA1 ( 学号 char(6) NOT NULL, 姓名 char(6) NOT NULL, 专业名 char(10) NULL, 性别 bit NOT NULL CONSTRAINT sexdflt DEFAULT
3、 1 ) GO 课外阅读:,默认值约束,方法三:SQL语句实现修改表时定义一个字段的默认值约束 【例】在修改表时定义一个新字段政治面貌并为其添加默认值约束团员。USE XSALTER TABLE XSDA1 ADD 政治面貌 char(4) NOT NULL CONSTRAINT zzmmdflt3 DEFAULT 团员 WITH VALUESGO 说明:如果添加的新列允许空值,若使用了WITH VALUES,则将为表中各现有行添加的新字段提供默认值;如果没有使用WITH VALUES,那么每一行的新列中都将为NULL值。如果添加的新列不允许空值,则不论是否有WITH VALUES选项,那么表
4、中各现有行添加的新字段都将取上述默认值。,默认值约束,【例5-12】在修改表时为学分字段添加默认值约束值为6。 USE XS ALTER TABLE KCXX ADD CONSTRAINT XF_DEFA DEFAULT(6) FOR 学分 GO (2)默认值约束的删除 【例5-12】删除上例定义的默认值约束。 USE XS ALTER TABLE XSDA DROP CONSTRAINT XF_DEFA GO(课外阅读:),默认值对象,2默认值对象的定义、使用及删除 (1)使用企业管理器定义和绑定DEFAULT默认值对象 使用企业管理器定义DEFAULT默认值对象 以XS数据库为例,对于XS
5、DA表中的民族字段,定义其默认值为“汉”。 使用企业管理器绑定DEFAULT默认值对象 默认值对象定义以后,要让它生效,必须绑定到列或用户定义数据类型。 方法1:右键单击默认值对象-【属性】,【绑定UDT】,表示绑定到用户定义数据类型;【绑定列】,表示绑定到列。 方法2:表设计器下拉列表,默认值对象,(2)使用T-SQL语句定义和绑定DEFAULT默认值对象 使用T-SQL语句定义DEFAULT默认值对象CREATE DEFAULT default_name ASconstant_expression说明:默认值对象名必须符合标识符规则。约束表达式constant_expression只能是常
6、量表达式。默认值对象必须与列数据类型兼容。 课外阅读:,默认值对象, 使用系统存储过程绑定默认值对象 sp_bindefault defname=default,objname=object_name说明: default指定默认值对象名; object_name指定准备绑定默认值对象的表的列名(格式为:表名.字段名)或用户定义的数据类型名。不能将默认值对象绑定到timestamp数据类型的列、带IDENTITY属性的列或者已经有DEFAULT约束的列; 课外阅读:,【例】对于前面所述的XSDA表中的民族字段可用如下程序实现默认值设置为“汉”。USE XSGOCREATE DEFAULT mz
7、_default AS 汉 GOEXEC sp_bindefault mz_default1,XSDA.民族GO 【例】在XS数据库中创建名为rxdate的默认值对象(取值为当前系统日期),然后将其绑定到XSXX表(例5-1中创建)的入学日期列。USE XSGOCREATE DEFAULT rxdate AS getdate()GOEXEC sp_bindefault rxdate,XSXX.入学日期GO,【例】对于前面所述的XSDA表中的民族字段可用如下程序实现默认值设置为“汉”。USE XSGOCREATE DEFAULT mz_default AS 汉 GOEXEC sp_bindefa
8、ult mz_default1,XSDA.民族GO 【例】在XS数据库中创建名为rxdate的默认值对象(取值为当前系统日期),然后将其绑定到XSXX表(例5-1中创建)的入学日期列。USE XSGOCREATE DEFAULT rxdate AS getdate()GOEXEC sp_bindefault rxdate,XSXX.入学日期GO,默认值对象,(3)默认值对象的删除 应解除默认值对象的绑定关系,然后才能删除该默认值对象。 使用sp_unbindefault解除绑定关系 sp_unbindefault objname=object_name说明:参数object_name为要解除默
9、认值对象绑定关系的字段名(格式为:表名.字段名)或用户定义类型名。 删除默认值对象 DROP DEFAULT default,n 说明:参数default为现有默认值对象名;参数n表示可以指定多个默认值对象同时删除。,【例】解除默认值对象xb_default与用户定义数据类型sex的绑定关系,然后删除名为xb_default的默认值对象。 USE XS IF EXISTS(SELECT name FROM sysobjectsWHERE name=xb_default AND type=D) BEGINEXEC sp_unbindefault sex DROP DEFAULT xb_default END GO,默认值约束与默认值对象的区别:,默认值约束是在一个表内针对某一个字段定义的,仅对该字段有效。 默认值对象是数据库对象之一,在一个数据库内定义,可绑定到一个用户定义数据类型或库中某个表的字段,可重复利用。,Thank You !,Add your company slogan,