《《精编》SQL Server 2005数据库控制与维护》由会员分享,可在线阅读,更多相关《《精编》SQL Server 2005数据库控制与维护(65页珍藏版)》请在金锄头文库上搜索。
1、第8章 第8章SQLServer2005数据库控制与维护 数据库应用教程 数据库的完整性控制 数据库的安全性管理 数据库备份与还原 第8章SQLServer2005数据库控制与维护 8 1 1数据完整性概述 8 1 2使用约束实施数据完整性控制 8 1 3使用规则实施数据完整性控制 8 1数据库的完整性控制 8 1 4使用默认值实施数据完整性控制 8 1 5使用触发器实施数据完整性控制 8 1 1数据完整性概述 1 完整性的概念 数据完整性是指数据的正确性 有效性 一致性和相容性 由于数据库是一个动态的集合 数据不断地被插入和被修改 因此由于主观或客观的原因 可能破坏数据库的数据完整性 2 破
2、坏数据库的数据完整性的情况 1 无效的数据被添加到数据库中 如 某在教师管理系统中 输入的教师号不存在 2 对数据库的修改不一致 如 在两个不同的表中 同一教师的系号不同 3 将存在的数据修改为无效的数据 如 将某教师所在的系号修改为并不存在的系 8 1 1数据完整性概述 3 完整性机制 为了保证存放数据的完整性 DBMS应能对数据库进行数据完整性控制 在SQLServer2000中 提供了约束 默认值 规则 触发器等维护机制对数据完整性进行控制 4 完整性分类 在SQLServer中 数据完整性分成四类 实体完整性 域完整性 参照完整性和用户自定义完整性 8 1 1数据完整性概述 域完整性
3、也可称为列完整性 域完整性要求 向表中指定列输入的数据必须具有正确的数据类型 格式以及有效的数据范围 例如 在CollegeMIS数据库的SelectCourse表中 向Score 成绩 列输入数据时 不能出现字符 也不能输入小于0或大于100的数值 域完整性的控制方法 主要有CHECK约束 外键约束 默认约束 默认值 非空定义 规则以及在创建表时设置的数据类型 实体完整性的控制方法 主要有主键约束 惟一索引 惟一约束和指定IDENTITY属性 5 完整性控制方法 参照完整性的控制方法 主要有外键约束 有时利用触发器也可实现参照完整性控制 8 1 2使用约束实施数据完整性控制 在SQLServ
4、er中 可通过约束来实施数据库的数据完整性控制 常用的约束有NOTNULL 非空 约束 CHECK 检查 约束 UNIQUE 惟一 约束 PRIMARYKEY 主键 约束 FOREIGNKEY 外键 约束和DEFAULT 默认 约束 1 约束的建立 格式 ALTERTABLEtable nameADDCONSTRAINTconstraint namePRIMARYKEY CLUSTERED NONCLUSTERED column n 1 主键约束的创建 功能 为table name作为表名指定的表增加一个由constraint name指定名称的主键约束 例8 1 把CollegeMIS数据库
5、中SelectCourse表中的主键pk xuanke删除 然后重建 USECollegeMISGOALTERTABLESelectCourseDROPCONSTRAINTpk xuankeGOALTERTABLESelectCourseADDCONSTRAINTpk xuankePRIMARYKEY StuNo TeaNo CourseNo GO 8 1 2使用约束实施数据完整性控制 1 约束的建立 例8 2 为CollegeMIS数据库中的Department表的DepartName字段创建一个惟一约束 约束名为IX DepartName 2 惟一约束的创建 使用企业管理器创建惟一约束 在
6、一张数据表中 有时除主键需要具有唯一性外 还有其他列也需要具有唯一性 例如 在 系部 表中 主键为 系部代码 但是另外一个字段 系部名称 虽不是主键 也需保证它的唯一性 这时就需要创建表中的唯一约束 使用对象资源管理器创建唯一约束下面以 系部 表为例 为 系部名称 字段创建唯一约束 操作步骤如下 1 在 对象资源管理器 窗格中 右击需要设置唯一约束的表 本例为 系部 表 在弹出的快捷菜单中选择 修改 命令 打开 表设计器 窗口 2 在 表设计器 窗口中 右击需要设置为唯一约束的字段 本例为 系部名称 字段 在弹出的快捷菜单中选择 索引 键 命令 如图6 7所示 也可以直接单击工具栏中的 管理索
7、引和键 按钮 打开 索引 键 对话框 如图6 8所示 图6 7选择 索引 键 命令 图6 8 索引 键 对话框 3 在打开的 索引 键 对话框中 单击 添加 按钮 结果如图6 9所示 图6 9单击 添加 按钮创建唯一约束 4 设置好相关选项后 单击 关闭 按钮 完成唯一约束的创建 这时 不只是该表的主键必须为唯一 并且被设置为唯一约束的字段同样也必须为唯一 8 1 2使用约束实施数据完整性控制 1 约束的建立 格式 ALTERTABLEtable nameADDCONSTRAINTconstraint nameUNIQUE CLUSTERED NONCLUSTERED column n 2 惟
8、一约束的创建 使用Transact SQL语句 功能 为table name作为表名指定的表增加一个由constraint name指定名称的惟一约束 说明 惟一约束默认的索引类型为NONCLUSTERED 8 1 2使用约束实施数据完整性控制 1 约束的建立 例8 3 通过Transact SQL语句为CollegeMIS数据库中的Department表的Telephone字段创建一个惟一约束 约束名为IX Telephone 2 惟一约束的创建 使用Transact SQL语句 USECollegeMISGOALTERTABLEDepartmentADDCONSTRAINTIX Telph
9、oneUNIQUE Telephone GO 8 1 2使用约束实施数据完整性控制 1 约束的建立 例8 4 为CollegeMIS数据库中的 课程表 的 学分 字段创建一个检查约束 约束名为CK Grade 检查条件只允许为1 7分 不允许小于1分的学分和大于7分的学分出现 3 检查约束的创建 使用对象资源管理器 检查约束对输入的数据的值做检查 可以限定数据输入 从而维护数据的域完整性 操作步骤如下 1 在 对象资源管理器 窗格中 右击需要设置唯一约束的表 本例为 课程表 在弹出的快捷菜单中选择 修改 命令 打开 表设计器 窗口 2 在 表设计器 窗口中右击需要创建检查约束的字段 本例为 学
10、分 字段 在弹出的快捷菜单中选择 CHECK约束 命令 如图6 11所示 打开 CHECK约束 对话框 图6 11选择 CHECK约束 命令 3 在 CHECK约束 对话框中 单击 添加 按钮 然后在 名称 文本框中输入检查约束名称 在约束 表达式 文本框中输入约束条件 这里输入 学分 1AND 学分 7 如图6 12所示 图6 12设置 CHECK约束 条件 4 单击 关闭 按钮关闭对话框 完成检查约束的创建 注意 如果表中原来就有数据 并且数据类型或范围与所创建的约束相冲突 那么约束将不能成功创建 8 1 2使用约束实施数据完整性控制 1 约束的建立 格式 ALTERTABLEtable
11、nameADDCONSTRAINTconstraint nameCHECK logical expression 3 检查约束的创建 使用Transact SQL语句 功能 为table name作为表名指定的表增加一个由constraint name指定名称的检查约束 说明 logical expression 是检查约束的检查条件 通常是一个关系表达式或逻辑表达式 8 1 2使用约束实施数据完整性控制 1 约束的建立 例8 5 使用Transact SQL语句 为CollegeMIS数据库中的Student表的Birthday字段创建一个检查约束 约束名为CK Birthday 检查条件为
12、Birthday字段的值必须小于当前日期 3 检查约束的创建 使用Transact SQL语句 USECollegeMISGOALTERTABLEStudentADDCONSTRAINTCK BirthdayCHECK Birthday GetDate GO 8 1 2使用约束实施数据完整性控制 1 约束的建立 例8 6 为CollegeMIS数据库中的Student表的Sex字段创建一个默认约束 默认值为 男 4 默认约束的创建 使用对象资源管理器 操作步骤如下 1 在 对象资源管理器 窗格中 右击需要创建默认约束的表 这里为 学生 表 在弹出的快捷菜单中选择 修改 命令 打开 表设计器 窗
13、口 2 选择需要创建默认约束的字段 这里为 性别 字段 然后在下方的 列属性 选项卡中的 默认值或绑定 文本框中输入默认值 本例为选择 性别 字段 在默认值中输入 男 如图6 13所示 在用户输入某些数据时 希望一些数据在没有特例的情况下被自动输入 例如 学生的注册日期应该是数据录入的当天日期 学生的修学年限是固定的值 学生性别默认是 男 等情况 这个时候需要对数据表创建默认约束 下面分别用例子说明如何在对象资源管理器中和利用SQL语句创建默认约束 图6 13输入默认值 注意 单引号不需要输入 在表保存后 在单引号外还会自动生成一对小括号 3 关闭 表设计器 窗口 8 1 2使用约束实施数据完
14、整性控制 1 约束的建立 格式 ALTERTABLEtable nameADDCONSTRAINTconstraint nameDEFAULTconstant expressionFORcolumn name 4 默认约束的创建 使用Transact SQL语句 功能 为table name作为表名指定的表增加一个由constraint name指定名称的默认约束 说明 column name 是要设置默认约束的列名 constant expression 是设置的默认值 8 1 2使用约束实施数据完整性控制 1 约束的建立 例8 7 为CollegeMIS数据库中的Student表的Grad
15、e字段创建一个默认约束 约束名为DF Grade 默认值为1 4 默认约束的创建 使用Transact SQL语句 USECollegeMISGOALTERTABLEStudentADDCONSTRAINTDF GradeDEFAULT1FORGradeGO 8 1 2使用约束实施数据完整性控制 1 约束的建立 例8 8 为CollegeMIS数据库中的 教师 表的创建一个外键约束 约束名为FK Teacher Department 约束对应的主键表为Department 引用的主键字段为系部代码 本表 教师 表 的外键字段为系部代码 5 外键约束的创建 使用对象资源管理器 操作步骤如下 1
16、在 对象资源管理器 窗格中 右击需要创建外键约束的表 这里为 教师 表 在弹出的快捷菜单中选择 修改 命令 打开 表设计器 窗口 2 选择需要创建外键约束的字段 这里为 系部代码 字段 单击工具栏中的 关系 按钮 或右击该字段 在弹出的快捷菜单中选择 关系 命令 打开 外键关系 对话框 如图6 14所示 外键是用来维护表与表之间对应唯一关系的一种方法 可以利用对象资源管理器或SQL语句来创建外键约束 图6 14 外键关系 对话框 3 在 外键关系 对话框中 单击 添加 按钮 然后单击 表和列规范 的按钮 打开 表和列 对话框 在 主键表 下拉列表中选择 系部 表 在 外键表 的下拉列表框中选择 教师 表 分别在 主键表 和 外键表 的下面选择 系部代码 字段 如图6 15所示 图6 15 表和列 对话框 4 单击 确定 按钮 然后在 外键关系 对话框中进行相关设置后单击 关闭 按钮即可 8 1 2使用约束实施数据完整性控制 1 约束的建立 格式 ALTERTABLEtable nameADDCONSTRAINTconstraint nameFOREIGNKEY column name