数据库基础教程6第六章SQL中的约束和触发程序

上传人:re****.1 文档编号:569357986 上传时间:2024-07-29 格式:PPT 页数:48 大小:380.97KB
返回 下载 相关 举报
数据库基础教程6第六章SQL中的约束和触发程序_第1页
第1页 / 共48页
数据库基础教程6第六章SQL中的约束和触发程序_第2页
第2页 / 共48页
数据库基础教程6第六章SQL中的约束和触发程序_第3页
第3页 / 共48页
数据库基础教程6第六章SQL中的约束和触发程序_第4页
第4页 / 共48页
数据库基础教程6第六章SQL中的约束和触发程序_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《数据库基础教程6第六章SQL中的约束和触发程序》由会员分享,可在线阅读,更多相关《数据库基础教程6第六章SQL中的约束和触发程序(48页珍藏版)》请在金锄头文库上搜索。

1、第六章第六章 SQL中的约束和触发程序中的约束和触发程序Constraints and Triggers in SQL1概述概述n关系数据模型关系数据模型n关系数据结构关系数据结构n关系操作集合关系操作集合n关系完整性约束关系完整性约束n是对关系的某种约束条件是对关系的某种约束条件n防止对数据的意外破坏防止对数据的意外破坏2概述概述n关系模型的完整性约束关系模型的完整性约束n实体完整性实体完整性n参照完整性参照完整性n用户定义的完整性用户定义的完整性3概述概述n完整性的要求完整性的要求n数据库中数据的正确性、相容性数据库中数据的正确性、相容性n约束的实现约束的实现nDBMS支持对约束的声明支持

2、对约束的声明nfor datan使用触发器(触发程序)使用触发器(触发程序)nfor action (event)4SQL中的键码中的键码n主码和候选吗主码和候选吗nPrimary KeynUniquenKey & Indexn一般在一般在Primary Key上自动加上上自动加上Indexn在在Unique上的上的Index需另行声明需另行声明5SQL中的键码中的键码n实体完整性实体完整性n候选码的属性不能取候选码的属性不能取Null、也不能有重复值、也不能有重复值n反映同一关系中属性与属性之间的约束反映同一关系中属性与属性之间的约束6SQL中的键码中的键码声明声明Create Table

3、MovieStar(name char(30) Primary Key,address Varchar(255),gender char(1),birthday Date);7SQL中的键码中的键码声明声明Create Table MovieStar(name char(30),address Varchar(255),gender char(1),birthday Date,Primary Key(name);8SQL中的键码中的键码声明Create Table Movie(title char(20),year integer,incolor boolean,studioname char

4、(20),producerC# integer,Primary Key(title,name);9SQL中的键码中的键码声明Create Table MovieStar(name char(30) Primary Key,ID char(18) Unique,address Varchar(255),gender char(1),birthday Date);10SQL中的键码中的键码声明Create Table MovieStar(name char(30),ID char(18),address Varchar(255),gender char(1),birthday Date,Prima

5、ry Key (name),Unique (ID) );11参照完整性和外键参照完整性和外键n参照参照&被参照、被参照、主表主表&从表、主键从表、主键&外键外键n外键的外键的值值不允许参照不存在的主键的不允许参照不存在的主键的值值n主键与外键的相容主键与外键的相容n类型类型n属性名可以不同属性名可以不同n外键允许外键允许Nulln反映反映实体间实体间存在的约束存在的约束12参照完整性和外键参照完整性和外键声明声明n属性级属性级sno char(10) References student(sno),cno char(10) References course(cno),.n表级表级Foreig

6、n Key sno References student(sno),Foreign Key cno References course(cno),.13参照完整性和外键参照完整性和外键声明声明14保持参照完整性保持参照完整性n参照完整性的违例n从表n插入从表元组,且外键不为Nulln修改从表外键,且不为Nulln主表n删除主表元组,其已被参照n修改主表主键,其已被参照nDrop Table15保持参照完整性保持参照完整性策略策略nRESTRICTn前述违例的情况均不能操作n这是所有DBMS产品均支持的方式n安全的默认方式16保持参照完整性保持参照完整性策略策略nCASCADEn对主表的违例操作

7、n所有从表中的相关元组被级联删除或更新17保持参照完整性保持参照完整性策略策略nSET NULLn对主表的违例操作n从表中相关外键的值均被置为Null(前提是允许为Null)18保持参照完整性保持参照完整性策略策略nSET DEFAULTn对主表的违例操作n从表中相关外键的值均被置为相应的Default Value19n属性级属性级sno char(10) References student(sno)On Delete Set NullOn Update Cascade,.n表级表级Foreign Key sno References student(sno)On Delete Set Nu

8、llOn Update Cascade,.保持参照完整性保持参照完整性策略策略20对属性值的约束对属性值的约束n属性约束属性约束nnot nullncheck( ) with attributen域约束域约束ncheck( ) with domain21对属性值的约束对属性值的约束Not Nulln在定义属性时约束该属性不可取在定义属性时约束该属性不可取Nullsname char(20) not nullnPrimary Key约束:约束:n隐含隐含Not Nulln不加约束:不加约束:n隐含允许隐含允许Null22对属性值的约束对属性值的约束Checkn在定义属性时约束该属性必须使在定义属

9、性时约束该属性必须使Check 为为Truesage smallint Check(sage =15),gender char(1) Check(gender in (F, M)nBe Careful ! !不合适的情形不合适的情形nCheck中的子查询中的子查询nCheck中涉及其他属性或关系中涉及其他属性或关系23对属性值的约束对属性值的约束Domainn使使Domain包含包含Checkn将将Domain作用于属性作用于属性nCreate Domain GenderDomain char(1)Check(Value in (F, M)ngender GenderDomain,n以以Val

10、ue替代属性名替代属性名24全局约束全局约束n针对元组针对元组/关系的约束声明关系的约束声明n基于元组的基于元组的Checkn基于整个关系或多个关系的基于整个关系或多个关系的Check25全局约束全局约束元组元组Checkn存在于关系定义中的存在于关系定义中的Checkn对关系中的对关系中的当前元组当前元组的约束的约束n不适于多关系、子查询不适于多关系、子查询check(gender = F OR sname Not Like Ms.%),check(gender = M OR sname Not Like Mr.%),26全局约束全局约束断言断言Assertionn涉及整个关系、多关系的约束

11、涉及整个关系、多关系的约束n适用涉及子查询、复杂约束适用涉及子查询、复杂约束n真正的全局约束真正的全局约束n独立于关系独立于关系27全局约束全局约束断言断言AssertionnAssertion的声明的声明Create Assertion Check()n表达式中属性的引用必须显式说明表达式中属性的引用必须显式说明nSelect-From-WhereCheck(presC# Not In (Select cert# From MovieexecWhere netWorth NewTWorth)When(OldTWorth NewTWorth)Update MovieExecSet netWor

12、th = OldTWorthWhere cert# = NewTuple.cert#For Each Row名称名称激活的时机激活的时机事件事件新值新值/修改后的值修改后的值旧值旧值/修改前的值修改前的值执行程序的条件执行程序的条件每修改一个元组便激活每修改一个元组便激活44Trigger示例Create Trigger NetWorthTriggerAfter Update Of netWorth On MovieExecreferencingOld As OldTuple,New As NewTupleWhen(OldTWorth NewTWorth)When(OldTWorth NewT

13、Worth)Update MovieExecSet netWorth = OldTWorthWhere cert# = NewTuple.cert#For Each Row名称名称激活的时机激活的时机事件事件新值新值/修改后的值修改后的值旧值旧值/修改前的值修改前的值执行程序的条件执行程序的条件每修改一个元组便激活每修改一个元组便激活45Trigger示例 for each rowCreate Trigger NetWorthTriggerAfter Update Of netWorth On MovieExecreferencingOld As OldTuple,New As NewTupl

14、eWhen(OldTWorth NewTWorth)When(OldTWorth NewTWorth)Update MovieExecSet netWorth = OldTWorthWhere cert# = NewTuple.cert#For Each Row46Trigger示例 for each statementCreate Trigger AvgNetWorthTriggerInstead Of Update Of netWorth On MovieExecreferencingOld_Table As OldStuff,New_Table As NewStuffWhen(50000

15、0=Select Avg(netWorth) From (MovieExec Except OldStuff) Union NewStuff)Delete From MovieExec Where (name,address,cert#,netWorth) In OldStuff;Insert Into MovieExec (Select * From NwStuff);47包含Trigger的SQLCreate Assertion RichPrssAfter Insert On Studio;Update On Studio,Update Of netWorth On MovieExec,Insert On MovieExecCheck(Not ExistSelect * From Studio,MovieExecWhere presC=cert# And netWorth10000000)48

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号