- 1、本文档共70页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ORACLE中的用户定义的完整性 (3) 通过触发器(Trigger)来定义用户的完整性规则 触发器是一种特殊类型的存储过程,通过事件(插入、删除和更新)触发执行 是实现复杂完整性约束的有效方法 在应用中的其他作用 维护复制数据、保持导出数据列的当前值(自动更新导出列)、业务规则限制(书价不许一次提价超过10%)、实现定制记录(监控:不许周六、周日插入表,银行必须记录大于10000的事务等。) ORACLE中的用户定义的完整性 (3) 通过触发器(Trigger)来定义用户的完整性规则 三部分 事件:激活触发器 条件:测试触发器是否满足运行的条件 动作:触发器运行后执行的动作 数据库触发器是一类靠事件驱动的特殊过程,一旦由某个用户定义,任何用户对该数据的增、删、改操作均由服务器自动激活相应的触发子,在核心层进行集中的完整性控制。 ORACLE中的用户定义的完整性 定义数据库触发器的语句 CREATE [OR REPLACE] TRIGGER 例4: 为教师表Teacher定义完整性规则“教授的工资不得低于800元,如果低于800元,自动改为800元” CREATE TRIGGER UPDATE_SAL BEFORE INSERT OR UPDATE OF Sal, Pos ON Teacher FOR EACH ROW WHEN (:new.Pos=教授) BEGIN IF :new.sal800 THEN :new.Sal:=800; END IF; END; 约束和触发器 触发器用于维护数据库一致性,但最好考虑用约束 来实现同样的目的; 触发器根据操作来定义一致性; 约束易理解,能给DBMS较多机会优化执行; 约束可以阻止任何语句违反一致性; 触发器只能由特定语句来激活,比较灵活; 触发器的其他用途(如维护复制数据库等) Sybase 的完整性 在Sybase中解决完整性的方法还有规则、索引、触发器等 规则 创建一个值的清单或值的集合的规则 CREATE RULE rul_state AS @state in (‘CA’,’CO’,’WA’) 创建一个值的范围规则 CREATE RULE rul_disc_range AS @disco between 0 and 100 创建一个值由编辑掩码确定的规则 CREATE RULE rul_part_num AS @part_num like “[BF][1-9][1-9]_” Sybase 的完整性 规则 将规则rul_state与“authors.state”列和“publishers.state”列相绑定: EXEC sp_bindrule “rul_state”,”authors.state” EXEC sp_bindrule “rul_state”,” publishers.state” 将规则rul_disc_range与“discounts.discount”列相绑定: EXEC sp_bindrule “rul_disc_range”, “discounts.discount” 查看规则rul_state 的正文和其他有关的信息: EXEC sp_helptext rul_state EXEC sp_help rul_state 删除:DROP RULE rul_state Sybase 的完整性 唯一索引:限制唯一索引列的取值(唯一) CREATE [UNIQUE][CLUSTERED|NONCLUSTERED] INDEX index_name ON table_name(column_name[,column_name…]) 例如:为authors表的au_id列创建一个唯一索引 CREATE UNIQUE INDEX idx_u_auid ON authors(au_id) 参照完整性的实现 例:职工-部门数据库包含职工表EMP和部门表DEPT DEPT关系的主码为部门号Deptno EMP关系的主码为职工号Empno, 外码为部门号Deptno 该Deptno与DEPT关系中Deptno相对应 称DEPT为被参照关系或目标关系,EMP为参照关系 RDBMS实现参照完整性时需要考虑的4个方面 (1) 外码是否可以接受空值的问题 外码是否能够取空值是依赖于应用环境的语义的 在实现参照完整性时,系统除了应该提供定义外码的机制,还应提供定义外码列是否允许空值的机制 例1:在职工-部门数据库中,EMP关系包含有外码Deptno,某一元组的这一列若为空值,表示这个职工尚未分配到任何具体的部门工作。这和应用环境的语义是相
文档评论(0)