第十三章默认值约束、默认值对象、检查约束、规则、完整性实现13.1在表中定义及删除默认值约束1.默认值约束的定义1)定义表结构时定义字段的默认值约束语法格式:CREATE TABLE table_name/*指定表名*/NOTNULLINULLCcolumn_namedatatype[DEFAULTconstraint_expression]/*默认值约束表达式*[..])/*定义列名、该列的数据类型、是否空值及默认值约束*例1对于school数据库,定义studentx表时定义ssex字段的默认值约束为男。CREATETABLEstudentx(sno char(5) PRIMARY KEY,sname char(8),ssexchar(2)DEFAULT男sbirthday datetime,class char(5))2)修改表添加一个字段的同时定义相应的约束语法格式:ALTERTABLEtable_name/*指定表名*/NOTNULLINULLADDcolumnnamedatatypeCONSTRAINTconstraint_name/*指定约束名*/DEFAULTconstraint_expressionWITHVALUES/*默认值约束表达式*/WITH VALUES:仅用在对表添加新字段的情况下,若使用了WITHVALUES,则将为表中各现有行添加的新字段提供默认值:如果没有使用WITHVALUES,那么每一行的新列中都将为NULL值。例2在修改表时添加一个字段,并定义默认值约束。USE schoolALTER TABLE studentADDnationchar(16)NULLCONSTRAINTAddnationDEFAULT中国WITHVALUES3)对表中指定的列定义默认值语法格式:ALTERTABLEtablenameADDCONSTRAINTconstraintnameDEFAULTconstraint_expression FOR column
第十三章 默认值约束、默认值对象、检查约束、规则、 完整性实现 13.1 在表中定义及删除默认值约束 1. 默认值约束的定义 1) 定义表结构时定义字段的默认值约束 语法格式: CREATE TABLE table_name /*指定表名*/ ( column_name datatype NOT NULL | NULL [DEFAULT constraint_expression] /*默认值约束表达式*/ [,.n] ) /*定义列名、该列的数据类型、是否空值及默认值约束*/ 例 1 对于 school 数据库,定义 studentx 表时定义 ssex 字段的默认值约束为男。 CREATE TABLE studentx (sno char(5) PRIMARY KEY, sname char(8), ssex char(2) DEFAULT '男', sbirthday datetime, class char(5) ) 2)修改表添加一个字段的同时定义相应的约束 语法格式: ALTER TABLE table_name /*指定表名*/ ADD column_name datatype NOT NULL | NULL CONSTRAINT constraint_name /*指定约束名*/ DEFAULT constraint_expression WITH VALUES /*默认值约束表达式 */ WITH VALUES: 仅用在对表添加新字段的情况下,若使用了 WITH VALUES,则将为表中各现有行添加 的新字段提供默认值;如果没有使用 WITH VALUES,那么每一行的新列中都将为 NULL 值。 例 2 在修改表时添加一个字段,并定义默认值约束。 USE school ALTER TABLE student ADD nation char(16) NULL CONSTRAINT Addnation DEFAULT '中国' WITH VALUES 3)对表中指定的列定义默认值 语法格式: ALTER TABLE table_name ADD CONSTRAINT constraint_name DEFAULT constraint_expression FOR column
例3USE schoolALTER TABLE studentADDCONSTRAINTdefssexDEFAULT男FORsSex默认值约束可在企业管理器中删除。如果已知一个默认值约束的约束名,也可在查询分析器中执行SQL命令删除例4USE schoolALTERTABLE studentDROPCONSTRAINTdef_ssex13..2默认值对象的定义、使用与删除1.通过企业管理器定义和绑定DEFAULT默认值对象1)通过企业管理器定义DEFAULT默认值对象(1)进入企业管理器,并连接到school数据库:展开school数据库文件夹,选择“默认"图标右击,出现快捷菜单,如图所示,选择“新建默认”,进入默认属性定义窗口:(2)在窗口中输入默认值对象名“def_ssex"及默认值“男,选择“确定"后即定义了一个默认值对象。定义默认值对象的快捷菜单X-nSJUAOOO选择此项进入默认值对象定义窗口2)通过企业管理器将一个字段绑定到一个DEFAULT默认值对象上面已定义了默认值对象def ssex",下面将student表中的ssex字段绑定到该对象上,步骤如下:(1)在企业管理器中打开student表设计器:(2)将光标移至ssex字段,从默认值对象下拉表中选择其对应的默认值对象即可,如图所示。将字段绑定到默认值对象的窗口101X品全业中品日回A数美类型长度光纤hnaSs>aedatttchaatr1.尊光标移至ssex字段联信2.在默认值下拉框中选择需绑定的默认值对象def_sse业
将字段绑定到默认值对象的窗口 1.将光标移至ssex字段 2.在默认值下拉框中选择 需绑定的默认值对象def_ssex 1.将光标移至ssex字段 2.在默认值下拉框中选择 需绑定的默认值对象def_ssex 定义默认值对象的快捷菜单 选择此项进入默认值 对象定义窗口 例 3 USE school ALTER TABLE student ADD CONSTRAINT def_ssex DEFAULT '男' FOR ssex 默认值约束可在企业管理器中删除。如果已知一个默认值约束的约束名,也可在查询分 析器中执行 SQL 命令删除 例 4 USE school ALTER TABLE student DROP CONSTRAINT def_ssex 13.2 默认值对象的定义、使用与删除 1. 通过企业管理器定义和绑定 DEFAULT 默认值对象 1) 通过企业管理器定义 DEFAULT 默认值对象 (1) 进入企业管理器,并连接到 school 数据库;展开 school 数据库文件夹,选择“默认”图标 右击,出现快捷菜单,如图所示,选择“新建默认”,进入默认属性定义窗口; (2) 在窗口中输入默认值对象名“def_ssex”及默认值‘男’,选择“确定”后即定义了一个默认值 对象。 2) 通过企业管理器将一个字段绑定到一个 DEFAULT 默认值对象 上面已定义了默认值对象“def_ssex”,下面将 student 表中的 ssex 字段绑定到该对象上, 步骤如下: (1) 在企业管理器中打开 student 表设计器; (2) 将光标移至 ssex 字段,从默认值对象下拉表中选择其对应的默认值对象即可,如图 所示
2.通过SQL语句定义和绑定DEFAULT默认值对象(I)通过SQL命令定义DEFAULT默认值对象定义DEFAULT默认值对象的命令如下。语法格式:CREATEDEFAULTdefaultASconstant_expression(2)通过系统存储过程绑定DEFAULT默认值对象创建默认值对象后,要使其起作用,应使用sp_bindefault存储过程将其绑定到列或用户定义数据类型。语法格式:sp_bindefault [@defname=]'default ,[@objname=]'objectname'[, [@futureonly=] futureonly_flag']futureonly_flag■仅在将默认值对象绑定到用户定义数据类型时才使使用,当futureonly_flag的值为futureonly时,表示在此之前,该数据类型关联的列不继承该默认值。例5在school数据库中定义def ssex的默认值对象,然后将其绑定到student表的ssex字段。USE schoolGOCREATEDEFAULTdefssexAS男GOEXEC sp_bindefault'def_ssex','student.ssex'例6在school数据库中定义名为birthdaydate的数据类型,然后定义默认值对象birthday并将其绑定到用户定义的数据类型birthdaydate中。USE schoolGOEXECspaddtype"birthdaydate','datetime,NULLGOCREATE DEFAULT birthday AS'1979-2-10'GOEXECsp_bindefault'birthday,'birthday_date'13.2默认值对象的定义、使用与删除(1)利用sp_unbindefault解除绑定关系语法格式:sp_unbindefault [@objname=]'object_name' [, [@futureonly=] 'futureonly_flag]如果要删除一个默认值对象,首先应解除默认值对象与用户定义类型及表字段的绑定关系,然后才能删除该默认值对象
2. 通过 SQL 语句定义和绑定 DEFAULT 默认值对象 (1) 通过 SQL 命令定义 DEFAULT 默认值对象 定义 DEFAULT 默认值对象的命令如下。 语法格式: CREATE DEFAULT default AS constant_expression (2) 通过系统存储过程绑定 DEFAULT 默认值对象 创建默认值对象后,要使其起作用,应使用 sp_bindefault 存储过程将其绑定到列或用户定 义数据类型。 语法格式: sp_bindefault [ @defname = ] 'default' , [ @objname = ] 'object_name' [ , [ @futureonly = ] 'futureonly_flag' ] futureonly_flag ◼ 仅在将默认值对象绑定到用户定义数据类型时才使使用,当 futureonly_flag 的值为 futureonly 时,表示在此之前,该数据类型关联的列不继承该默认值。 例 5 在 school 数据库中定义 def_ssex 的默认值对象,然后将其绑定到 student 表的 ssex 字段。 USE school GO CREATE DEFAULT def_ssex AS '男' GO EXEC sp_bindefault 'def_ssex', 'student.ssex' 例 6 在 school 数据库中定义名为 birthday_date 的数据类型,然后定义默认值对象 birthday 并 将其绑定到用户定义的数据类型 birthday_date 中。 USE school GO EXEC sp_addtype 'birthday_date','datetime','NULL' GO CREATE DEFAULT birthday AS '1979-2-10' GO EXEC sp_bindefault 'birthday','birthday_date' 13.2 默认值对象的定义、使用与删除 (1) 利用 sp_unbindefault 解除绑定关系 语法格式: sp_unbindefault [@objname =] 'object_name' [, [@futureonly =] 'futureonly_flag'] 如果要删除一个默认值对象,首先应解除默认值对象与用户定义类型及表字段的绑定 关系,然后才能删除该默认值对象
(2)删除默认值对象解除默认值对象与用户定义类型及表字段的绑定关系后,即可用DROP语句删除默认值对象。语法格式:DROPDEFAULT(default[...n]futureonly_flag■仅在将默认值对象绑定到用户定义数据类型时才使使用,当futureonly_flag的值为futureonly时,现有的属于该数据类型的列默认值不变。例7解除默认值birthday与school数据库中用户定义数据类型birthday_date的绑定关系,然后删除名为birthday的默认值对象。USE schoolGOEXEC sp_unbindefault"birthday_date'GODROPDEFAULTbirthday13.3数据完整性的分类1.域完整性域完整性又称为列完整性,指列数据输入的有效性。例8定义表scorel的同时定义degree字段的约束条件:USE schoolCREATE TABLE scorelsnochar(5)NOT NULL,(cno char(10) NOT NULLdegreenumeric(18,1)CHECK (degree>=0AND degree<=100)NULL,PRIMARYKEY(sno,cno))GO2.实体完整性实体完整性又称为行的完整性,要求表中有一个主键,其值不能为空且能唯一地标识对应的记录。3.参照完整性参照完整性又称为引用完整性。参照完整性保证主表中的数据与从表中数据的一致性。13.3.1域完整性的实现1.CHECK约束的定义与删除CHECK约束实际上是字段输入内容的验证规则,表示一个字段的输入内容必须满足CHECK约束的条件,若不满足,则数据无法正常输入。1)通过企业管理器创建与删除CHECK约束星件区「关系素引1/键CCK约束】E装名选定的约速ICY册除CIR8LAT100)C2创中检子现荐存教活AO聘
(2) 删除默认值对象 解除默认值对象与用户定义类型及表字段的绑定关系后,即可用 DROP 语句删除默认值对 象。 语法格式: DROP DEFAULT { default } [ ,.n ] futureonly_flag ◼ 仅在将默认值对象绑定到用户定义数据类型时才使使用,当 futureonly_flag 的值为 futureonly 时,现有的属于该数据类型的列默认值不变。 例 7 解除默认值 birthday 与 school 数据库中用户定义数据类型 birthday_date 的绑定关系, 然后删除名为 birthday 的默认值对象。 USE school GO EXEC sp_unbindefault 'birthday_date' GO DROP DEFAULT birthday 13.3 数据完整性的分类 1. 域完整性 域完整性又称为列完整性,指列数据输入的有效性。 例 8 定义表 score1 的同时定义 degree 字段的约束条件: USE school CREATE TABLE score1 ( sno char(5) NOT NULL, cno char(10) NOT NULL, degree numeric(18,1) CHECK (degree >=0 AND degree<=100) NULL, PRIMARY KEY(sno,cno) ) GO 2. 实体完整性 实体完整性又称为行的完整性,要求表中有一个主键,其值不能为空且能唯一地标识 对应的记录。 3. 参照完整性 参照完整性又称为引用完整性。参照完整性保证主表中的数据与从表中数据的一致性。 13.3.1 域完整性的实现 1. CHECK 约束的定义与删除 CHECK 约束实际上是字段输入内容的验证规则,表示一个字段的输入内容必须 满足 CHECK 约束的条件,若不满足,则数据无法正常输入。 1) 通过企业管理器创建与删除 CHECK 约束
2)利用SQL语句在创建表时创建CHECK约束语法格式:CREATETABLE table_name/*指定表名*/NOT NULL INULLcolumnnamedatatype/*默认[DEFAULTconstraint_expression]值约束表达式*/[check_name]CHECK (logical_expression )]/*CHECK约束表达式*/[...n])/*定义列名、数据类型、标识列、是否空值及定义缺省值约束、CHECK约束*/USE schoolCREATE TABLE scorelsnochar(5)NOTNULLcno char(10) NOT NULLdegree numeric(18,1) CHECK (degree >=0AND degree<=100)NULL,PRIMARY KEY(sno,cno))GO3)利用SQL语句在修改表时创建CHECK约束语法格式:ALTERTABLEtablenameADDCONSTRAINTchecknameCHECK(logical_expression)例9通过修改school数据库score表,增加degree字段的CHECK约束:要求degree必须在0-100之间USE schoolGOALTER TABLE scoreADD CONSTRAINTchk_scoreCHECK(degree BETWEENOAND100)4)利用SQL语句删除CHECK约束■CHECK约束的删除可在企业管理器中通过界面删除,也可以利用SQL命令删除。语法格式:ALTERTABLEtablenameDROPCONSTRAINTcheck_name例10删除school数据库中score表degree字段的CHECK约束。USE school
2) 利用 SQL 语句在创建表时创建 CHECK 约束 语法格式: CREATE TABLE table_name /*指定表名*/ ( column_name datatype NOT NULL | NULL [DEFAULT constraint_expression] /* 默 认 值约束表达式*/ [[check_name ] CHECK ( logical_expression )] /*CHECK 约束表达式*/ [,.n] ) /* 定义列名、数据类型、标识列、是否空值及定义缺省值约束、CHECK 约束*/ USE school CREATE TABLE score1 ( sno char(5) NOT NULL, cno char(10) NOT NULL, degree numeric(18,1) CHECK (degree >=0 AND degree<=100) NULL, PRIMARY KEY(sno,cno) ) GO 3) 利用 SQL 语句在修改表时创建 CHECK 约束 语法格式: ALTER TABLE table_name ADD CONSTRAINT check_name CHECK (logical_expression) 例 9 通过修改 school 数据库 score 表,增加 degree 字段的 CHECK 约束:要求 degree 必须在 0-100 之间. USE school GO ALTER TABLE score ADD CONSTRAINT chk_score CHECK(degree BETWEEN 0 AND 100) 4) 利用 SQL 语句删除 CHECK 约束 ◼ CHECK 约束的删除可在企业管理器中通过界面删除,也可以利用 SQL 命令删 除。 语法格式: ALTER TABLE table_name DROP CONSTRAINT check_name 例 10 删除 school 数据库中 score 表 degree 字段的 CHECK 约束。 USE school