练习4 约束、默认和规则4.1上机目的1、练习使用企业管理器和T-SQL命令在查询分析器中创建表,管理表,熟悉并逐步掌握其中的步骤和对应语句。
2、在企业管理器和查询分析器中练习约束、规则、默认的设置,通过练习逐步掌握约束的种类,作用和创建方法3、了解数据库关系图的作用,掌握数据库关系图的建立方法。
4.2 上机练习预备知识点4.2.1 数据完整性1、数据完整性是指数据库中数据的正确性和一致性,是衡量数据库质量的一个重要标准。
2、数据完整性包括:实体完整性、区域完整性、参照完整性、自定义完整性。
①实体完整性:确保数据库中所有实体的唯一性,也就是不应有完全相同的数据记录。
实现方法:设定主键、设定唯一键、设定唯一索引、设置标识②区域完整性:要求数据表中的数据位于某一个特定的允许范围内。
实现方法:设定默认值、设定核查约束、设定外键约束、设定规则③参照完整性:用来维护相关数据表之间数据一致性的手段,避免因一个数据表的记录改变而造成另一个数据表内的数据变成无效的值。
实现方法:设定外键约束、核查约束、触发器和存储过程④用户自定义完整性:由用户根据实际应用中的需要自行定义。
实现方法:规则、触发器、存储过程等。
4.2.2 约束1、实现数据完整性最重要的方法,主要目的是限制输入到表中的数值的范围。
字段级约束:是数据表中字段定义的一个部分,只能应用于数据表中的一个字段。
如:为性别设置核查约束,只能输入“男”或者“女”,不能输入其他内容。
数据表级约束:独立于数据表的字段定义之外,它可以应用于数据表中的多个字段。
如将表中的几个字段组合设置为主键。
2、约束的种类:①主键(PRIMARY KEY)约束唯一标识表中的每一行的列或者列的组合,可以强制表的实体完整性。
主键不允许为空。
②外键(FOREIGN KEY)约束若列或者列的组合不是本表的关键字,而是另一个表的关键字,则称这些列或者列的组合是外键。
一般表与表之间通过主键和外键进行连接,通过它可以强制表与表之间实现参照完整性。
外键约束要求列中的每个值在被引用表对应的被引用列中都存在。
③唯一(UNIQUE)约束用于确保非主键字段中数据的唯一性。
③核查(CHECK)约束用于限制输入到一列或多列的值的范围,从逻辑表达式判断数据的有效性。
④默认(Default)约束向数据表中插入记录时,如果用户没有指定该列的值,而该列需要一个明确值的情况下,则插入默认约束定义的值。
⑥非空(Not null)约束该约束的列不允许使用空值。
4.2.3 实现主键约束1、企业管理器中:在表设计视图中实现。
如图4-1所示如果是多个字段设置主键的情况,安Ctrl 键同时选中几个字段,设置主键。
图4-1 设置主键2、定义的T-SQL 语句:[CONSTRAINT constraint_name] PRIMARY KEY [(CONSTRAINT :约束 constraint_name :约束名称 3、创建表时设置主键单个字段设置主键(字段级约束)例1 项目编号 int CONSTRAINT PK_pno PRIMARY KEY 或者 项目编号 int PRIMARY KEY 多个字段设置主键(表级约束) 例2 项目编号 int,项目名称 char(10),CONSTRAINT PK_pno_pname PRIMARY KEY(项目编号,项目名称) 注:以上两个例子,只是创建表语句的一部分,不是全部。
4、修改表时添加主键 ALTER TABLE table_nameADD [CONSTRAINT constraint_name] PRIMARY KEY [(5、修改表时删除主键 ALTER TABLE table_name DROP CONSTRAINT constraint_name注:所有删除约束的T-SQL 语句相同,后面不再赘述。
6、设置主键的注意点①修改表上已经存在的主键时,只能先删除原有主键再重新建立一个新的主键约束。
②当主键被别的表引用时,不允许删除主键约束,除非首先将引用主键的外键删除。
③区分字段级主键约束与表级主键约束。
④使用相关语句删除主键约束时,会用到约束名称。
*7、可以使用sp_pkeys table_name 查看定义好的主键约束。
4.2.4 实现唯一约束1、企业管理器中:打开表设计视图,选择“属性”按钮,如图4-2所示在索引/键选项页中新建唯一约束。
图4-2 在表设计视图属性对话框设置唯一约束2、定义的T-SQL语句:[CONSTRAINT constrain_name] UNIQUE [(字段名[,…n]) ]参数说明:UNIQUE:唯一3、创建表时设置唯一约束单个字段设置唯一约束(字段级约束)例3 部门名称char(18) null CONSTRAINT UN_dname UNIQUE 或者部门名称char(18) null UNIQUE多个字段设置唯一约束(表级约束)例4 部门名称char(10) ,部门负责人char(10) ,CONSTRAINT UN_dname_dm UNIQUE (部门名称,部门负责人)注:以上两个例子,只是创建表语句的一部分,不是全部。
4、修改表时添加唯一约束所用的语句和添加主键约束相似,只是关键字的不同ALTER TABLE table_nameADD [CONSTRAINT constraint_name] UNIQUE [(字段名[,…n])] 5、唯一约束和主键约束的区别..: ①UNIQUE 约束用于非主键的一列或列组合;②一个表可以定义多个UNIQUE 约束,而只能定义一个PRIMAYR KEY 约束;③UNIQUE 约束可以用于允许空值的列,而PRIMAYR KEY 约束则不能用于允许空值的列。
4.2.5 实现外键约束1、企业管理器中:打开表设计视图,选择“属性”按钮,打开“关系”选项页,如图4-3所示图4-3在表设计视图属性对话框设置外键约束2、定义的T-SQL 语句:[CONSTRAINT constrain_name] FOREIGN KEY [(字段名[,...n]) ] 从表的列名 REFERENCES ref_table (ref_column[...n]) 主表名和主表中对应的列名 [ ON DELETE {CASCADE|NO ACTION}] [ ON UPDATE {CASCADE|NO ACTION}] 参数说明:[ ON DELETE {CASCADE|NO ACTION}] :如果指定CASCADE ,执行级联删除相关记录;如果指定NO ACTION ,则在删除父表中的被引用到的记录时,SQL Server 将返回一个错误操作信息并拒绝删除操作。
[ ON UPDATE {CASCADE|NO ACTION}]:如果指定CASCADE ,执行级联更新相关记录;如果指定NO ACTION ,则在更新父表中的被引用到的记录时,SQL Server 将返回一个错误操作信息并拒绝更新操作。
[ NOT FOR PLICATION]:数据通过复制添加到数据表时,不执行外键约束。
3、创建表时设置外键约束例5 若已有员工表(员工编号,员工姓名)其中“员工编号”是主键,接下来定义项目表(项目编号,项目负责人),那么“项目负责人”就可以定义一个外键约束,它与“员工表”主键的“员工编号”进行关联。
项目负责人 char(6) null CONSTRAINT FK_dno FOREIGN KEY REFERENCES 员工表 (员工编号)或者 项目负责人 char(6) null FOREIGN KEY REFERENCES 员工表 (员工编号) 4、修改表时添加外键约束 ALTER TABLE 项目表ADD CONSTRAINT FK_pname FOREIGN KEY (项目负责人) REFERENCES 员工表 (员工编号) 5、说明①级联更新相关记录:当主键表中的主键值被修改后,系统将自动强制的修改外键表中所有外键值与主键表中被修改主键值相同的行,以保证表间的参照完整性。
②级联删除相关记录:当主键表中的主键值所在行被删除后,系统将自动强制的删除外键表中所有外键值与主键表中被删除主键值相同的行,以保证表间的参照完整性。
③一个表可以有多个外键约束。
④外键约束只能引用被引用表中为主键(PRIMARY KEY )或者唯一约束(UNIQUE )的列或者被引用表中在唯一索引(UNIQUE INDEX )内引用的列。
⑤主键和外键的数据类型和长度必须一致。
⑥定义表间参照关系:先定义主表的主键,再对从表定义外键约束。
4.2.6 实现核查约束1、企业管理器中:打开表设计视图,选择“属性”按钮,打开“CHECK 约束”选项页,如图4-4所示图4-4 在表设计视图属性对话框设置CHECK 约束2、定义的T-SQL 语句:[CONSTRAINT constraint_name] CHECK (logical_expression) 参数说明:logical_expression :逻辑表达式返回TRUE 或 FALSE 3、创建表时设置核查约束例 6 月薪 smallmaney nullCONSTRAINT CK_esa CHECK (月薪>=1000 AND 月薪<=2000)或者 月薪 smallmaney null CHECK (月薪>=1000 AND 月薪<=2000)4、修改表时添加核查约束例7 ALTER TABLE 员工表ADD CONSTRAINT CK_no CHECK (员工编号like ‘[A~Z][0~9][0~9][0~9]’)将员工编号限定为4位,其中第一位的取值范围是’A’~’Z’或者’a’~’z’,其他位为’0’~’9’,输入其他符号被认为无效。
5、注意①列可以有任意多个核查约束,并且约束条件中可以包含用AND和OR组合起来的多个逻辑表达式。
②约束条件必须取值为布尔表达式,并且不能引用其他表。
③使用T-SQL修改核查约束,必须先删除已有的核查约束,然后再重新定义。
4.2.7 实现默认约束1、在企业管理器中,在表设计视图中实现。
如图4-5所示图4-5 在表设计视图设置默认约束2、创建表时设置默认约束例7 性别char(2) notnull DEFAULT ‘男’3、修改表时添加默认约束例8 ALTER TABLE 员工表ADD CONSTRAINT Default_sex DEFAULT ‘男’FOR 性别4.2.8 默认对象1、默认是一种数据库对象,可以绑定到数据表的一列或多列上,产生与DEFAULT约束相同的作用。
2、默认和DEFAULT约束不同点:①DEFAULT约束在创建表或修改表时定义,嵌入到被定义的表的结构中,删除表时DEFAULT约束也被删除。