资源预览内容
第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
第9页 / 共24页
第10页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第6 6章章 SQL SERVER 2008SQL SERVER 2008数据完整性数据完整性+数据完整性是SQL Server用于保证数据库中 数据一致性的一种机制,以防止非法信息 存在于数据库中。SQL Server 2008提供了 许多措施来保护数据的完整性,如数据类 型、主键、外键、默认值、约束和规则 等。6.1 6.1 什么是数据完整性什么是数据完整性+所谓数据完整性是指存储在数据库中的数 据是正确的,而且在逻辑上符合现实情况 的要求。设计数据完整性的目的是为了防 止数据库中存在不符合语义规定的数据, 防止错误信息的输入和输出。数据库完整 性一般分为4类:实体完整性、域完整性、 引用完整性和用户定义完整性。6.1.1 6.1.1 实体完整性实体完整性+实体完整性的基本思想是标识数据库中存 放的每一个实体。实体就是数据库所要标 识的一个实际的物体和事件。+实体完整性要求每个实体都保持唯一性。 SQL Server 2008实现实体完整性主要是通 过唯一索引、UNIQUE约束、PRIMARY KEY约束或IDENTITY属性,强制表的标识 符列或主键来实现的。6.1.2 6.1.2 域完整性域完整性+实体完整性考虑究竟应该向表输入哪些值,而 域完整性则考虑如何限制向表中输入的值的范 围。它要求表中指定列的数据具有正确的数据 类型、格式和有效的数据范围。 +域完整性可以通过强制域完整性限制类型(通 过使用数据类型)、限制格式(通过使用 CHECK约束和规则)或限制可能值的范围( 通过使用FOREIGN KEY约束、CHECK约束、 DEFAULT定义、NOT NULL定义和规则)来 实现。6.1.3 6.1.3 引用完整性引用完整性+引用完整性又称为参照完整性。在输入或 删除记录时,引用完整性用于维持参照表 和被参照表之间的数据一致性。在SQL Server 2008中,引用完整性通过主键( PRIMARY KEY)和外键(FOREIGN KEY )约束来实现。6.1.3 6.1.3 引用完整性引用完整性+强制引用完整性时,SQL Server 2008将防止用户执 行下列操作。 +在主表中没有关联的记录时,将记录添加或更改到 相关表中。 +更改主表中的值,这会导致相关表中生成孤立记 录。 +从主表中删除记录,但仍存在与该记录匹配的相关 记录。 +对于AdventureWorks数据库中的SalesOrderDetail表 和Product表,引用完整性基于SalesOrderDetail表中 的外键(ProductID)与Product表中的主键( ProductID)之间的关系。此关系可以确保销售订单 从不引用产品表中不存在的产品。6.1.4 6.1.4 用户定义的完整性用户定义的完整性+不同的关系数据库系统根据其应用环境的 不同,往往还需要一些特殊的约束条件。 用户定义的完整性即是针对某个特定关系 数据库的约束条件。SQL Server 2008提供 了一些工具来帮助用户实现数据完整性, 其中最主要的是规则(Rule)、约束( Constraint)和触发器(Trigger)。6.2 6.2 什么是约束什么是约束+约束是SQL Server提供的自动保持数据库完整性的 一种方法。它是数据库服务器强制用户必须遵从的 业务逻辑。它通过限制字段中的数据、记录中的数 据和表之间的数据来保证数据的完整性。SQL Server 2008提供了下列约束机制来强制列中数据的 完整性。 +PRIMARY KEY约束; +UNIQUE约束; +CHECK约束; +DEFAULT定义; +NULL; +FOREIGN KEY约束。6.2.1 6.2.1 使用主键约束使用主键约束PRIMARYPRIMARY KEYKEY+PRIMARY KEY约束是指通过表的主键实现的实体完整性约 束。为了能够唯一确定表中的数据行,通常会通过一列或几列 来唯一地标识表中的行。这样的一列或多列称为表的主键。+Purchasing.PurchaseOrderDetail表中的PurchaseOrderID和 PurchaseOrderDetailID列构成了针对此表的复合PRIMARY KEY 约束。这确保了PurchaseOrderID和PurchaseOrderDetailID的组合 是唯一的。6.2.1 6.2.1 使用主键约束使用主键约束PRIMARYPRIMARY KEYKEY+1建立PRIMARY KEY约束的规则+2使用表设计器建立PRIMARY KEY约束+3使用SQL语句建立PRIMARY KEY约束+使用Transact-SQL语句定义PRIMARY KEY 约束的语法格式如下。+CONSTRAINT constraint_name+PRIMARY KEY CLUSTERED|NOCLUSTERED+(column_name,.n)6.2.2 6.2.2 使用唯一性约束使用唯一性约束UNIQUEUNIQUE+UNIQUE约束(唯一性约束)主要用于非主键 列,以保证一列或者多列的组合值具有唯一性 ,以防止在列中输入重复值。 +当使用唯一性约束时,需要考虑以下几个因 素。 +使用唯一性约束的字段允许为空值。 +一个表中可以允许有多个唯一索引。 +可以把唯一索引定义在多个字段上。 +唯一性索引用于强制在指定字段上创建一个唯 一性索引。 +默认情况下,创建的索引类型为非聚类索引。6.2.2 6.2.2 使用唯一性约束使用唯一性约束UNIQUEUNIQUE+1利用表设计器建立UNIQUE约束 +在Practice_JWGL数据库中,为用户信息表中 的身份证号码字段列建立UNIQUE约束的。 +2使用SQL语句建立UNIQUE约束 +使用Transact-SQL语句定义UNIQUE约束的语 法格式如下:+CONSTRAINT constraint_name +UNIQUE CLUSTERED|NOCLUSTERED +(column_name,.n)6.2.3 6.2.3 使用检查约束使用检查约束CHECKCHECK+CHECK约束(检查约束)的主要作用是限制输入到一 列或多列中数据的可能值,从而来保证SQL Server数据 库中数据的域完整性。 +当使用CHECK约束时,需要考虑以下几个因素。 +一个列级检查约束只能与限制的字段有关;一个表级检 查约束只能与限制的表中字段有关。 +每个CREATE TABLE语句中每个字段只能定义一个检 查约束。 +在多个字段上定义检查约束,则必须将检查约束定义为 表级约束。 +当执行INSERT语句或UPDATE语句时,检查约束将验 证数据。 +检查约束中不能包含子查询。6.2.3 6.2.3 使用检查约束使用检查约束CHECKCHECK+1使用表设计器建立CHECK约束 +在Practice_JWGL数据库中,假如系统定义成绩信息 表中的成绩字段采用的是百分制,那么就需要为成 绩字段设置CHECK约束,来保证成绩输入的有效 性。为成绩信息表中的成绩字段建立CHECK约束 的。 +2使用SQL语句建立CHECK约束 +使用Transact-SQL语句定义CHECK约束的语法格式 如下。+CONSTRAINT constraint_name +CHECK NOT FOR REPLICATION +(logical_expression)6.2.4 6.2.4 使用默认值约束使用默认值约束DEFAULTDEFAULT+DEFAULT定义(默认约束)是指在执行插入操作 时,如果没有为列提供输入值时,则系统自动为列 指定值。默认约束可以包括常量、函数等。当使用 默认约束时,需要考虑以下几个因素。 +每个字段只能定义一个默认约束。 +如果定义的默认值长于该字段的允许长度,那么输 入到表中的默认值将被截断。 +不能将默认约束加入到带有IDENTITY属性或者数 据库类型为timestamp的字段上。 +如果字段定义为用户定义的数据类型,而且有一个 默认绑定到这个数据类型上,则不允许该字段有默 认约束。6.2.4 6.2.4 使用默认值约束使用默认值约束DEFAULTDEFAULT+1使用表设计器建立DEFAULT约束 +在Practice_JWGL数据库中,为班级信息表中 的年级字段建立DEFAULT约束的。 +2使用SQL语句建立DEFAULT约束 +使用Transact-SQL语句定义约束的语法格式如 下:+CONSTRAINT constraint_name +DEFAULT constraint_expression FOR column_name6.2.5 6.2.5 使用空值约束使用空值约束NULLNULL+列的空值约束定义了表中数据行的特定列 是否可以指定为空值。空值(NULL)不同 于零(0)、空白或长度为零的字符串(如 “)。 +在SQL Server 2008中,允许空值的实现有 两种方法:一是在表设计器中设计列的时 候,选择该列是否可以为空,默认可以为 空;另外一种方法就是在用Transact-SQL语 句创建数据表的时候,在对列的描述的时 候附加NULL/NOT NULL来实现。6.2.6 6.2.6 使用外键约束使用外键约束FOREIGN KEYFOREIGN KEY+FOREIGN KEY约束(外键约束)是用于建立和加强两个表数 据之间的连接关系的一列或多列。 +FOREIGN KEY约束并不仅仅可以与另一表的PRIMARY KEY约 束相链接,它还可以定义为引用另一表的UNIQUE约束。 +在使用FOREIGN KEY约束时,需要注意以下几点。 +一个表最多只能参照253个不同的数据表,每个表也最多只能有 253个FOREIGN KEY约束。 +FOREIGN KEY约束不能应用于临时表。 +在实施FOREIGN KEY约束时,用户必须至少拥有被参照表中 参照列的SELECT或者REFERENCES权限。 +FOREIGN KEY约束同时也可以参照自身表中的其他列。 +FOREIGN KEY约束,只能参照本身数据库的某个表,而不能 参照其他数据库中的表。跨数据库的参照只能通过触发器来实 现。6.2.6 6.2.6 使用外键约束使用外键约束FOREIGN KEYFOREIGN KEY+1使用SQL Server Management Studio建立 FOREIGN KEY约束+在Practice_JWGL数据库中,某个学生必定 会属于具体的某个班级。因此,需要在班 级实体和学生实体之间建立一对多的联 系。需要定义班级信息表中的班级编号为 主键,而学生信息表中的班级编号为外 键。为学生信息表中的班级编号字段建立 FOREIGN KEY约束。6.2.6 6.2.6 使用外键约束使用外键约束FOREIGN KEYFOREIGN KEY+2使用SQL语句建立FOREIGN KEY约束+使用Transact-SQL语句定义FOREIGN KEY 约束的语法格式如下:+CONSTRAINT constraint_name+FOREIGN KEY (column_name,.N)+REFERENCES ref_table (ref_column ,.N)6.3 6.3 使用规则使用规则+规则是一个向后兼容的功能,用于执行一些与 CHECK约束相同的功能。CHECK约束是用来 限制列值的首选标准方法。CHECK约束比规 则更简明,一个列只能应用一个规则,但是却 可以应用多个CHECK约束。SQL Server 2008 采用CREATE RULE命令来创建一个规则,其 语法格式如下:+CREATE RULE schema_name . rule_name +As condition_expression + ; 6.3 6.3
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号