5. SQL Server完整性限制的设定 (1) Default 概念:用于为列或用户自定义数据类型指定缺省值,每一列或 自定义类型只能有一个缺省值。 设定方式: ①表定义时设定 示例: CREATE TABLE publishers (pub_id char(4) NOT NULL pub_name varchar (40) NULL C varchar(20) DEFAULT 'Pasadena state char(2 DEFAULT,) ②创建 Default 当多个表中的列其缺省值相同时,这种方式很有用。 Designed by Tao Hongcai 2021年2月23日11
Designed by Tao Hongcai 2021年2月23日 11 5.SQL Server完整性限制的设定 概念:用于为列或用户自定义数据类型指定缺省值,每一列或 自定义类型只能有一个缺省值。 (1)Default 设定方式: ① 表定义时设定 CREATE TABLE publishers (pub_id char(4) NOT NULL, pub_name varchar(40) NULL, city varchar(20) DEFAULT ‘Pasadena’ , state char(2) DEFAULT ‘CA’) 示例: ② 创建Default 当多个表中的列其缺省值相同时,这种方式很有用
步骤: (A) CREATE DEFAULT缺省名AS缺省值 (B)sp_ bindefault‘缺省名’,‘表名.列名 示例 CREATE dEFaULT dft state AS 'CA sp_ _bindefault ' dft_state, publishers. state 注意:要求列名的类型与缺省值相同。绑定了缺省值后,并不会 对绑定缺省值之前表中已存在的值产生影响,而只对绑定之后的值产 生影响。 取消某列的缺省: sp_ unbindefault‘表名.列名’ 删除缺省: DROP DEFAULT缺省名 注意:应保证该缺省已从所有绑定的列上摘除,否则删除不会 成功。 Designed by Tao Hongcai 2021年2月23日12
Designed by Tao Hongcai 2021年2月23日 12 步骤: (A) CREATE DEFAULT 缺省名 AS 缺省值 (B) sp_bindefault ‘缺省名’ , ‘表名.列名’ 取消某列的缺省:sp_unbindefault ‘表名.列名’ CREATE DEFAULT dft_state AS ‘CA’ sp_bindefault ‘dft_state’ , ‘publishers.state’ 注意:要求列名的类型与缺省值相同。绑定了缺省值后,并不会 对绑定缺省值之前表中已存在的值产生影响,而只对绑定之后的值产 生影响。 示例: 删除缺省:DROP DEFAULT 缺省名 注意:应保证该缺省已从所有绑定的列上摘除,否则删除不会 成功
(2) Rule 概念:针对表中的某一列,指明某列的取值范围。在更新该列 值时, RDBMS首先要检查是否在该规则规定的范围內。 设定步骤: ① CREATE RULE规则名AS规则 示例: CREATE RULE State rule as@ state IN(CA’,CO’,WA) 注意: ★规则可用IN(.), BETWEEN..AND..,关系式<、>、<=、>=、 <>、〓等和凵KE等操作符描述。 ★创建规则时,应注意AS后有一个以@开头的临时变量。 ② sp bindrule规则名,’表名.列名 示例:sp_ bindrule state rule, publishers.ste Designed by Tao Hongcai 2021年2月23日13
Designed by Tao Hongcai 2021年2月23日 13 (2)Rule 概念:针对表中的某一列,指明某列的取值范围。在更新该列 值时,RDBMS首先要检查是否在该规则规定的范围内。 设定步骤: ① CREATE RULE 规则名 AS 规则 CREATE RULE state_rule AS @state IN(‘CA’ , ’CO’ , ’WA’) 示例: ② sp_bindrule 规则名,’表名.列名’ ★规则可用IN(…),BETWEEN … AND … ,关系式<、>、<=、>=、 <>、=等和LIKE等操作符描述 。 注意: ★创建规则时,应注意AS后有一个以 @开头的临时变量。 示例:sp_bindrule state_rule, ‘publishers.state’
解除规则绑定: sp_ unbindrule‘表名.列名 删除规则: DROP RULE规则名 扩展用法:将创建好的缺省和规则绑定到用户定义类型上 sp_ bindrule规则名,用户定义类型 sp_ bindefault缺省名,用户定义类型 要求:先应创建好用户定义类型,然后再绑定。 将缺省和规则从用户定义类型摘除: sp_ unbindefault用户定义类型 sp_ unbindrule用户定义类型 查看创建规则和缺省的过程: sp_ helptext规则名或缺省名 注意:①缺省必须从属于规则,缺省与规则都有时,必须同时满足 ②一般在绑定一个新规则或缺省时,应先摘除旧规则或旧缺省,如没有 摘除,则自动用新规则/新缺省替换旧的。 Designed by Tao Hongcai 2021年2月23日14
Designed by Tao Hongcai 2021年2月23日 14 解除规则绑定:sp_unbindrule ‘表名.列名’ 扩展用法:将创建好的缺省和规则绑定到用户定义类型上 sp_bindrule 规则名,用户定义类型 sp_bindefault 缺省名,用户定义类型 要求:先应创建好用户定义类型,然后再绑定。 查看创建规则和缺省的过程: 删除规则:DROP RULE 规则名 将缺省和规则从用户定义类型摘除: sp_unbindefault 用户定义类型 sp_unbindrule 用户定义类型 sp_helptext 规则名或缺省名 注意:①缺省必须从属于规则,缺省与规则都有时,必须同时满足; ②一般在绑定一个新规则或缺省时,应先摘除旧规则或旧缺省,如没有 摘除,则自动用新规则/新缺省替换旧的
(3)检查限制 概念:类似于规则,要求用户插入到列或表中的数据满足限制 条件。 分类:分列级和表级两种。列级针对表中一列,表级则针对同 表中多列。 列级检查限制(用IN、 BETWEEN.AND或LKE表达): CREATE TABLE publishers (pub id char(4) NOT NULL CONSTRAINT pub_id_ constraint CHECK(pub id IN(234, 3344, 564 OR pub id LiKE 43[0-9][0-9) city varchar(20) NULl state char(2) NULL) 其中: pub id constraint为限制名。 Designed by Tao Hongcai 2021年2月23日15
Designed by Tao Hongcai 2021年2月23日 15 (3)检查限制 概念:类似于规则,要求用户插入到列或表中的数据满足限制 条件。 列级检查限制(用IN、BETWEEN…AND或LIKE表达): CREATE TABLE publishers ( pub_id char(4) NOT NULL, CONSTRAINT pub_id_constraint CHECK( pub_id IN (‘234’ , ’3344’ , ’564’) OR pub_id LIKE ‘43[0-9][0-9]’), city varchar(20) NULL, state char(2) NULL) 其中:pub_id_constraint为限制名。 分类:分列级和表级两种。列级针对表中一列,表级则针对同 一表中多列