欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    完整性约束定义.ppt

    • 资源ID:6268967       资源大小:201.49KB        全文页数:30页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    完整性约束定义.ppt

    1,5.4 数据完整性的概念与实施方法,5.4.1 数据完整性概念数据完整性是指数据的正确性、完备性和一致性,是衡量数据库质量好坏的重要标准。在用INSERT、DELETE、UPDATE语句修改数据库内容时,数据的完整性可能会遭到破坏。可能会存在下列情况:无效的数据被添加到数据库的表中。如:将学生考试成绩输入成负数;SQL Server提供了对数据库中表、列实施数据完整性的方法。对表进行设计数据完整性有两个重要内容:标识列的有效值和确定如何强制列中的数据完整性。,2,1.域完整性域完整性是指一个列的输入有效性,是否允许空值。强制域完整性的方法有:限制类型(通过设定列的数据类型)、格式(通过CHECK约束和规则)或可能值的范围(通过 FOREIGN KEY 约束、CHECK 约束、DEFAULT定义、NOT NULL定义和规则)。2.实体完整性实体完整性是指保证表中所有的行唯一。实体完整性要求表中的所有行都有一个唯一标识符。这个唯一标识符可能是一列,也可能是几列的组合,称之为主键。也就是说,表中主键在所有行上必须取值唯一。强制实体完整性的方法有:索引、UNIQUE约束、PRIMARY KEY约束或 IDENTITY属性。3.参照完整性参照完整性也叫引用完整性。参照完整性总是保证主关键字(被引用表)和外部关键字(引用表)之间的参照关系。它涉及两个或两个以上表数据的一致性维护。,3,5.4.2 数据完整性实施方法1.声明型数据完整性声明型数据完整性一般在对象创建时定义,由SQL Server强制实施,通常使用约束、缺省值和规则来实现。实现基本数据完整性的首选方法是使用声明型数据完整性。声明型数据完整性作为数据库对象说明的一部分在语法中实现,在CREATE TABLE和ALTER TABLE定义中使用CONSTRAINT、DEFAULT等语句限制表中的值。使用这种方法实现数据完整性简单且不易出错,系统直接将实现数据完整性的要求定义在表和列上。2.过程型数据完整性过程型数据完整性是指由某个过程引发而实施的数据完整性。一般先写出实施数据完整性的条件,再写出强制该条件所执行的用于保证数据完整性的脚本。通常由触发器和存储过程实现。过程型数据完整性也可以在客户机和服务器上使用其它编程语言和工具实现。,4,5.4.3 约束1.约束的定义和类型约束是SQL Server提供的自动保持数据库完整性的一种方法。列级约束:列级约束是行定义的一部分,只能够应用在一列上。表级约束:表级约束的定义独立于列的定义,可以应用在一个表中的多列上。约束有六种类型:非空约束、缺省约束、检查约束、主键约束、唯一约束、外键约束(参照约束)。非空约束(NOT NULL):表中的某些列必须存在有效值,不允许有空值出现。这是最简单的数据完整性约束,可在建表时将该列声明为NOT NULL即可。缺省约束(DEFALUT CONSTRAINTS):当向数据库中的表插入数据时,如果用户没有明确给出某列的值,SQL Server自动为该列输入指定值。,5,检查约束(CHECK CONSTRAINTS):限制插入列中的值的范围。主键约束(PRIMARY KEY CONSTRAINTS):要求主键的列上没有两行具有相同值,也没有空值。唯一约束(UNIQUE CONSTRAINTS):要求表中所有行在指定的列上没有完全相同的列值。外键约束(FROEIGN KEY CONSTRAINTS):要求正被插入或更新的列(外键)的新值,必须在被参照表(主表)的相应列(主键)中已经存在。,6,不同的约束强制不同类型的数据完整性。表中 给出了两者的对应关系。,7,2.使用T-SQL语言创建、管理约束(1)使用CREATE TABLE语句创建约束使用CREATE TABLE语句创建约束的一般语法如下:CREATE TABLE table_name(column_name data_typeCONSTRAINT constraint_namePRIMARY KEY CLUSTERED|NONCLUSTERED|UNIQUE CLUSTERED|NONCLUSTERED|FOREIGN KEY REFERENCES ref_table(ref_column)|DEFAULT constant_expression|CHECK(logical_expression),.n),8,其中:table_name:创建约束所在的表的名称。column_name:列名。data_type:数据类型。constraint_name:约束名。在创建、修改、实现约束时注意以下几点:可以在已有的表上创建、修改、删除约束,而不必删除并重建表。可以在应用程序中创建错误检查逻辑,测试是否违反约束。在给表添加约束时,SQL将验证表中已有数据是否满足正在添加的约束。,9,缺省约束缺省约束是指当向数据库中的表插入数据时,如果用户没有明确给出某列的值时,SQL Server自动为该列输入的值,缺省约束用于实现域的完整性。创建DEFAULT约束时应考虑以下因素:DEFAULT约束只能用于INSERT语句不能用于具有IDENTITY属性的列每列只能有一个DEFAULT约束【例1】为数据库JWGL中表teacher的SEX(性别)字段创建一个缺省约束,缺省值为1(男)USE JWGLGOALTER TABLE teacherADD CONSTRAINT default_sex DEFAULT 1 FOR SEX,10,检查约束检查约束用来指定某列可取值的清单、可取值的集合或可取值的范围。检查约束主要用于实现域完整性。创建CHECK约束时应考虑以下因素:当向数据库中的表执行插入或更新操作时,检查插入的新列值是否满足CHECK约束条件不能在具有IDENTITY属性,或具有timestamp或uniqueidentifier数据类型的列上放置CHECK约束CHECK条件不能含有子查询【例2】为数据库JWGL中表student_course 的GRADE(成绩)字段创建一个检查约束,使得GRADE的值在0-100之间。USE JWGLGOALTER TABLE student_courseADD CONSTRAINT check_grade CHECK(grade=0 and grade=100),11,主键约束主键约束保证某一列或一组列值的组合相对于表中的每一行都是唯一的,主键约束创建在表的主键列上,它对实现实体完整性更加有用。主键约束的作用就是为表创建主键。创建PRIMARY KEY约束时应考虑以下因素:每个表只能有一个主键,并且必须有一个主键;不允许有空值;参照约束使用它作为维护参照完整性的参考点;创建主键时,在创建主键的列上创建了一个唯一索引,可以是聚簇索引,也可以是非聚簇索引,默认是聚簇索引。【例3】将数据库JWGL中teacher表的teacher_id(教师号)字段设为主键。USE JWGLGOALTER TABLE teacher ADD CONSTRAINT PK_teacher_id PRIMARY KEY clustered(teacher_id),12,唯一约束唯一约束限制表中指定列上所有的非空值必须唯一,即表中任意两行在指定列上都不允许有相同的值。创建UNIQUE约束时应考虑以下因素:一个表可以放置多个UNIQUE约束允许有空值创建唯一索引时强制UNIQUE约束【例4】将数据库JWGL中teacher表的teacher_id(教师号)字段设为唯一约束。USE JWGLGOALTER TABLE department ADD CONSTRAINT unique_department_name UNIQUE nonclustered(department_name),13,唯一约束和主键约束的区别:唯一约束与主键约束都为指定的列建立唯一索引,即不允许唯一索引的列上有相同的值。主键约束限制更严格,不但不允许有重复值,而且也不允许有空值。唯一约束与主键约束产生的索引可以是聚簇索引也可以是非聚簇索引,但在缺省情况下唯一约束产生非聚簇索引,主键约束产生聚簇索引。外键约束通过外键约束强制参照完整性。SQL Server提供了外键/主键值约束。即满足以下两点:存在外键时,被参照表中这一行不能删除。向子表插入记录或更新子表中外键值的前提是,必须保证这个外键值与主表中主键的某个值相等或者该外键值为空,否则不允许插入或修改外键值。,14,创建FOREIGN KEY约束时应考虑以下因素:它提供一列或多列数据的参照完整性。FOREIGN KEY约束不自动创建索引。但如果考虑数据库的多表连接,建议为外键创建一个索引,以提高连接性能主键与外键的数据类型和长度必须一致,或系统可转换【例5】为表teacher创建外键department_id,外键department_id参考表department中的主键department_id。USE JWGLGOALTER TABLE teacher ADD CONSTRAINT FK_department_id FOREIGN KEY(department_id)REFERENCES department(department_id)GO,15,3.使用企业管理器管理约束创建缺省约束 创建缺省约束的具体步骤如下:启动企业管理器。分别点击“数据库”、“JWGL”、“表”,显示数据库JWGL中所有的表。右击要设置缺省的表(假设要设置缺省的表为teacher),在系统弹出的快捷菜单上点击“设计表”,点击设置缺省的列,在下面列属性设置栏的默认值输入框中,输入对应缺省值即可。创建检查约束创建主键约束创建唯一性约束 创建外键约束,16,5.4.4 使用默认值1.默认值的定义默认值是数据库对象之一,它指定在向数据库中的表插入数据时,如果用户没有明确给出某列的值,SQL Server自动为该列使用此默认值。它是实现数据完整性的方法之一。在关系数据库中,每个列都必须包含有值,即使这个值是个空值。对于不接受空值的列,就必须为该列输入某个非空值,要么由用户明确输入,要么由SQL Server输入默认值。默认值可用于表中的列和用户定义数据类型。请注意,缺省约束中使用的缺省值可以由用户创建时输入,也可以通过绑定已创建的默认值来指定。在创建默认值时,请考虑以下几点:默认值需和它要绑定的列或用户定义数据类型具有相同的数据类型。默认值需符合该列的所有规则。默认值缺省还需符合所有CHECK约束。创建、管理默认值可以用T-SQL语言也可以用企业管理器,17,2.使用T-SQL语言创建默认值:创建默认值的语法 CREATE DEFAULT default_name AS constant_expression这里:default_name:新建默认值的名称,它必须遵循SQL Server标识符的命名规则。constant_expression:默认值default_name的值,是一个常数表达式,在这个表达式中不能含有任何列名或其他数据库对象名,但可使用不涉及数据库对象的SQL Server内部函数。默认值创建后,可以使用系统存储过程sp_helptext可以查看用于定义一个默认值的SQL脚本。其语法是:sp_helptext default_name,18,默认值的绑定默认值创建之后,只有将其绑定到某个列或用户自定义数据类型才能有效。使用系统存储过程sp_bindefault可实现与表中的列及用户自定义数据类型的绑定。一个默认值可以绑定到多个列或用户自定义数据类型。绑定默认值的语法是:sp_bindefault default_name,object_name其中:default_name:由CREATE DEFAULT 语句创建的默认值名字,它将与指定的列或用户定义数据类型相绑定。object_name:要与该默认值相绑定的列名或用户自定义数据类型名。如果指定的是表中的列,其格式为table_name.column;否则被认为是用户自定义数据类型名。,19,默认值绑定的几点考虑:绑定的默认值只适用于受INSERT语句影响的行。不能将默认值绑定到系统数据类型或timestamp列。若绑定了一个默认值到一用户定义数据类型,又给使用该数据类型的列绑定了一个不同的默认值或规则,则绑定到列的默认值和规则有效。默认值绑定的解除一个默认值被绑定到表中的列或用户自定义的数据类型之后,可使用系统存储过程sp_unbinddefault解除其绑定。绑定解除后,作为数据库对象的默认值仍然存在于数据库中。解除默认值绑定的语法是:sp_unbindefault object_name object_name:要解除和默认值绑定的表的列名或用户自定义数据类型名。如果指定的是表中的列,其格式为“table_name.column”,否则被认为是用户定义数据类型名。,20,默认值绑定的删除如果一个默认值不再使用了,可以用DROP语句将其删除。删除默认值的语法是:DROP DEFAULT default_name default_name:要删除默认值的名称。在删除默认值时,应注意以下几点:DROP将默认值从数据库中删除。如果要删除一个默认值,必须解除这个默认值的所有绑定,否则该默认值就不能被删除掉。在一个批中不能既定义默认值又同时使用默认值。只有默认值的创建者可以删除默认值。,21,【例6】为数据库JWGL创建一个名为profession_default,值为“讲师”的默认值,并绑定到表teacher的profession列,然后解除这个绑定,绑定解除后将此默认值删除。USE JWGLGOCREATE DEFAULT profession_default AS 讲师GOsp_bindefault profession_default,teacher.professionGOsp_unbindefault teacher.professionDROP DEFAULT profession_defaultGO,22,5.4.5 规则1.规则的定义规则是数据库对象之一。它指定向表的某列(或使用与该规则绑定的用户定义数据类型的所有列)插入或更新数据时,限制输入新值的取值范围。一个规则可以是:值的清单或值的集合;值的范围;必须满足的单值条件;用like子句定义的编辑掩码;规则是实现域完整性的方法之一。规则用来验证一个数据库中的数据是否处于一个指定的值域范围内,是否与特定的格式相匹配。当数据库中数据值被更新或被插入时,就要检查新值是否遵循规则,如果不符合规则就拒绝执行此更新或插入的操作。,23,规则可用于表中列或用户定义数据类型。规则在实现功能上等同于CHECK约束。用CREATE RULE语句创建规则,然后用sp_bindrule把它绑定至一列或用户定义的数据类型。使用系统存储过程sp_helptext查看用于定义一个规则或缺省的SQL脚本。其语法是:sp_helptext rule_name在创建规则时,应考虑以下几点:缺省情况下,规则将检查创建和绑定规则之前输入的数据。规则可以绑定到一列、多列或数据库中的用户定义数据类型。规则要求一个值在一定范围内,并与特定格式相匹配。在一个列上至多有一个规则起作用,如果有多个规则与一列相绑定,那么只有最后绑定到该列的规则才是有效的。,24,2.使用T-SQL语言创建、管理规则 创建规则的语法是:CREATE RULE rule_name AS condition_expression rule_name:创建规则的名称,应遵循SQL Server标识符的命名规范。condition_expression:指明定义规则的条件,在这个条件表达式中不能包含列名或其他数据库对象名,但它带有一个为前缀的参数(即参数的名字必须以为第一个字符),也称空间标志符(spaceholder)。意即这个规则被附加到这个空间标志符,它只在规则定义中引用,为数据项值在内存中保留空间,以便与规则作比较。规则的绑定规则创建之后,只有将其绑定到某个列或用户自定义数据类型才能有效。使用系统存储过程sp_binderule可实现与表中的列及用户自定义数据类型的绑定。绑定规则的语法是:sp_bindrule rule_name,object_name,25,其中:rule_name:由CREATE RULE语句创建的规则名字,它将与指定的列或用户定义数据类型相捆绑。object_name:指定要与该规则相绑定的列名或用户定义数据类型名。如果指定的是表中的列,其格式为“table.column”,否则被认为是用户定义数据类型名。绑定时应注意如下几点:绑定的缺省只适用于受INSERT语句影响的行。绑定的规则只适用于受INSERT和UPDATE语句影响的行。不能将缺省或规则绑定到系统数据类型或timestamp列。,26,解除规则使用系统存储过程sp_unbindrule可以解除由sp_unbindrule绑定到列或用户定义数据类型的规则。但被解除的规则仍然存在于数据库中。解除规则的语法如下:sp_unbindrule rule_name,object_name其中:rule_name:由CREATE RULE语句创建的规则名字,它将与指定的列或用户定义数据类型相捆绑。object_name:指定要解除与该规则相绑定的列名或用户定义数据类型名。如果指定的是表中的列,其格式为table.column;否则被认为是用户定义数据类型名。,27,删除规则使用DROP RULE可删除由CREATE RULE命令创建的规则。删除规则的语法如下:DROP RULE owner.rule_name其中:rule_name:要解除的规则。在删除规则时,应注意以下几点:使用DROP可将规则从数据库中删除。在删除规则之前需先从列中或用户定义数据类型中解除绑定。只有规则定义者可以删除规则。,28,【例7】为数据库JWGL创建一个规则grade_rule,grade_rule的值大于等于0,小于等于100,并绑定到表student_course的grade列,然后解除这个绑定,绑定解除后将此规则删除。USE JWGLGOcreate rule grade_rule as grade=0 and grade=100GOsp_bindrule grade_rule,student_course.gradeGOsp_unbindrule student_course.gradeGOdrop rule grade_rule,29,5.4.6 使用标识列1.标识列的定义 IDENTITY属性使得某一列的取值是基于上一行的列值和为该列定义的步长自动生成的。IDENTITY列的值可以唯一地标识表中的一行,可以用于实现实体完整性。有关DENTITY列属性的特点及定义DENTITY列时的注意事项,本章第一节已经介绍。2.用T-SQL语言定义标识列 定义标识列的语法:ALETR TABLE table_name ADD column_name data_type IDENTITY(seed,increment),30,table_name:要添加标识列的表名。column_name:要添加的标识列的名称。data_type:要添加的标识列的数据类型。Seed:标识列的种子值。Increment:标识列的步长。【例9】给表class增加一个标识列class_no,种子值:1,步长:1。USE JWGLGOALTER TABLE classADD class_no int IDENTITY(1,1)3.用企业管理器定义标识列使用企业管理器定义标识列的方法在已经介绍。,本章首页,

    注意事项

    本文(完整性约束定义.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开