资源描述:
《数据库系统基础教程(第7章)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章约束和触发器1SQL中约束种类数据库设计质量体现为约束constraints所提供的可靠性保障。约束以表达式或语句的形式存储在数据库中。约束是一种主动性(active)元素,当数据库特定状态发生改变时自动运行。SQL2提供部分完整性约束:键、参照完整性、域约束、元组约束等。SQL3提供触发器trigger机制:由特定事件触发某种主动性元素。27.1键和外键3键与外键键key是最重要的约束。每个表都必须确定自己的键。每个表都可能有多个属性集可作为键,称为“候选键candicatekey”。一个表只能确定一个主键(PrimaryKey)。若某个属性说明为Unique,则它
2、是一个候选键。若关系的某个属性说明为外键,则该属性出现的值,一定会在另一个关系的主键中出现。4主键声明如何说明表中的主键?SQL语言有两种说明主键的方式。方式1:CreateTable语句中,某属性说明之后加PrimaryKey方式2:属性表之后,加PrimaryKey(属性1,属性2,…)若主键有多个属性,则只能用方式2。GUI操作方式更方便直观。5用UNIQUE声明键如何说明表中的主键?SQL语言有两种说明主键的方式。方式1:CreateTable语句中,某属性说明之后加UNIQUE方式2:属性表之后,加UNIQUE(属性1,属性2,…)若用UNIQUE说明键有多个属性
3、,则只能用方式2。GUI操作方式更方便直观6例子考虑关系SalesMan的模式(方式1)CREATETABLESalesMan(empidVARCHAR(10)PRIMARYKEY,idnoVARCHAR(18)UNIQUE,nameVARCHAR(30),genderCHAR(1),birthdayDATE,addressVARCHAR(255),phoneVARCHAR(13));7例子考虑关系SalesMan的模式(方式2)CREATETABLESalesMan(empidVARCHAR(10),idnoVARCHAR(18),nameVARCHAR(30),gend
4、erCHAR(1),birthdayDATE,addressVARCHAR(255),phoneVARCHAR(13),PRIMARYKEY(empid),UNIQUE(idno));8主键和Unique属性之间有何区别和联系一个表有且仅有一个主键;而Unique属性可有多个或没有。主键是单个属性,则该属性隐含为Unique。主键不允许有NULL值,属性为Unique则允许有NULL值。若主键是多个属性,则每个属性都不可能为Unique。DBMS对主键往往自动赋予一些特征,如建立索引index等。9强制键约束什么操作会导致违背键约束?对表的delete操作不会违背该表的键约
5、束。insert和update可能违背该表的键约束。SQL实施主键约束即是在insert和update时检验键值,避免空值或重复键值。10外键约束声明如何说明外键两种SQL方式:方式1:某属性之后加references<被参照表>(被参照属性)。方式2:属性表之后加foreignkey<参照属性>references<被参照表>(被参照属性)。其中:被参照属性应是被参照表的PrimaryKey或unique属性。11例子例:CREATETABLEStarsIn(MovietitleVARCHAR(90)NOTNULL,MovieyearINTNOTNULL,StarName
6、VARCHAR(30)NOTNULL,PRIMARYKEY(Movietitle,Movieyear,StarName),FOREIGNKEY(Movietitle,Movieyear)ReferencesMovie(title,year),FOREIGNKEYStarNameReferencesStars(name));12外键约束声明是否可定义一个表参照自己?可以。例如:salesman(empid,idno,name,managerid,deptid,…)外键是否可取NULL值?可以。13维护引用完整性数据库更新时如何保证参照完整性?有三种可选策略,以保证参照完整性:
7、1Restrict限制(缺省)2Cascade级联3SetNull置空14Restrict限制(缺省)以StarsIn(movieTitle,MovieYear,…)参照Movie(title,year,…)为例:对于StarsIn(参照表),下面操作被拒绝:insert语句中movieTitle和MovieYear值不是Movie中已有的一个主键值。update语句中改变movieTitle和MovieYear值为不是Movie中已有的主键值。对于Movie(被参照表),Restrict拒绝以下操作:delete