一、断言

在SQL中可以使用数据定义语言中的CREATE ASSERTION语句,通过声明性断言来指定更具一般性的约束。可以定义涉及多个表或聚集操作的比较复杂的完整性约束。断言创建以后,任何对断言中所涉及关系的操作都会触发关系数据库管理系统对断言的检查,任何使断言不为真值的操作都会被拒绝执行。

1、创建断言的语句格式

CREATE ASSERTION<断言名>< CHECK子句>
每个断言都被赋予一个名字,

2、删除断言的语句格式

DROP ASSERTION <断言名>;
备注:如果断言很复杂,则系统在检测和维护断言上的开销会比较高,因此要注意是否使用断言。

二、触发器

触发器(trigger)是用户定义在关系表上的一类由事件驱动的特殊过程。一旦定义,触发器将被保存在数据库服务器中,任何用户对表的增删改操作均由服务器自动激活相应的触发器,在关系数据库管理系统核心层进行集中的完整性控制。

1、定义触发器

触发器又叫做事件-条件-动作规则。当特定的系统事件(如对一个表进行增删改操作,事务的结束)发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作,否则就不执行。规则中的动作体可以很复杂,可以涉及其他表和其他数据库对象,通常是一段SQL存储过程。
SQL使用CREATE TRIGGER命令建立触发器,其格式:CREATE TRIGGER<触发器名> –(每当触发事件发生时该触发器被激活)
{BEFORE|AFTER}<触发事件>ON<表名> –(指明触发器激活的时间在执行触发器事件前或后)
REFERENCING NEW|OLD ROW AS<变量> –(REFERENCING指出引用的变量)
FOR EACH{ROW|STATEMENT} –(定义触发器的类型,指明动作体执行的频率)
[WIEN <触发条件>]<触发动作体> –(近当触发条件为真时才执行触发动作体)
说明
1. 只有表的拥有者,即创建表的用户才可以在表上创建触发器,并且一个表上只能创建一定数量的触发器。触发器的具体数量由具体的关系数据库管理系统在设计时确定。
2. 触发器名可以包含模式名,也可以不包含模式名。同一模式下,触发器名必须是唯一的,并且触发器名和表名必须在同一模式下。
3. 触发器只能定义在基本表上,不能定义在视图上。当基本表的数据发生变化时,将激活定义在该表上相应触发器事件的触发器,因此该表也成为触发器的目标表。
4. 触发事件可以是INSERT、DELETE或UPDATE,也可以是这几个事件的组合,如INSERT OR DELETE等,还可以说UPDATE OF<触发列,…>,即进一步指明修改哪些列时激活触发器。AFTER/DEFORE是触发器的时机。AFTER表示触发事件的操作执行之后激活触发器;DEFORE表示触发器事件的操作执行之前激活触发器。
5. 触发器按照所触发动作的间隔尺寸可以分为行级触发器(FOR EACH ROW)和语句级触发器(FOR EACH STATEMENT)。
6. 触发器被激活时,只有当触发条件为真时触发动作体才执行,否则触发动作体不执行。如果省略WHEN触发条件,则触发动作体在触发器激活后立即执行。
7. 触发动作体既可以是一个匿名PL/SQL过程块,也可以说对已创建存储过程的调用。如果说行级触发器,用户可以在过程体中使用NEW和OLD引用UPDATE/INSERT事件之后的新值和UPDAET/DELETE事件之前的旧值;如果是语句级触发器,则不能在触发动作体中使用NEW或OLD进行引用。

如果触发动作体执行失败,激活触发器的事件(即对数据库的增删改操作)就会终止执行执行,触发器的目标或触发器可能影响的其他对象不发生任何变化。

2、激活触发器

触发器的执行是由触发事件激活,并由数据库服务器自动执行的。一个数据表上可能定义了多个触发器,如多个BEFORE触发器、多个AFTER 触发器等,同一个表上的多个触发器激活时遵循如下的执行顺序:
1. 执行该表上的BEFIRE触发器。
2. 激活触发器的SQL语句。
3. 执行该表上的AFTER触发器。

对于同一个表上的多个BEFORE(AFTER)触发器,遵循“谁先创建谁先执行”的原则,即按照触发器创建的时间先后顺序执行。有些关系数据库管理系统按照触发器名称的字母排序执行触发器。

3、删除触发器

SQL语句:DROP TRIGGER<触发器名>ON<表名>
触发器必须是一个已创建的,并且只能由相应权限的用户删除。

备注:触发器虽然功能强大,但是每次访问一个表都可能触发一个触发器,会导致系统性能降低,所以要谨慎使用。

数据库完整性--断言和触发器相关推荐

  1. 数据库完整性--断言--触发器实验

    一.实验目的: (1)理解和掌握数据库完整性–断言–触发器,能够使用SQL语句对数据库完整性–断言–触发器实验操作. (2)掌握SQL语句常见语法错误的调试方法. 二.实验内容: 按照下列要求操作,并 ...

  2. 数据库完整性(实体完整性、参照完整性、用户定义的完整性、完整性约束命名字句、断言、触发器)

    数据库完整性:数据的正确性(是指数据是符合现实世界语义,反映了当前实际状况的).数据的相容性(是指数据库同一对象在不同关系表中的数据是符合逻辑的) 数据的完整性 : 防止数据库中存在不符合语义的数据, ...

  3. 数据库工作笔记012---mysql触发器trigger 实例详解_保证数据库完整性还是不错的

    mysql的触发器,可以挺好的保证数据库的数据的完整性,这个还是不错的 JAVA技术交流QQ群:170933152 比如: 我一个表中的数据有变化,那么与之关联的几个表可以通过触发器来实现同步 --- ...

  4. 重温《数据库系统概论》【第一篇 基础篇】【第5章 数据库完整性】

    本篇内容为中国人民大学教授王珊.萨师煊的<数据库系统概论>自学课程的复习笔记,学习视频源于小破站(传送门),对应视频P32-P36,属教材"[第一篇 基础篇]"的&qu ...

  5. SQL关于数据库完整性

    SQL语句关于数据库完整性 数据的正确性和相容性 5.1实体完整性 5.1.1 定义实体完整性 例5.1 将Student表中的Sno属性定义为码. CREATE TABLE Student (Sno ...

  6. 5.0 数据库完整性详解(PRIMARY KEY、REFERENCES、CHECK、CONSTRAINT、DOMAIN、TRIGGER)

    文章目录 00:引用文章链接 ==>>BitHachi 01:数据库完整性概述 (1)DBMS为维护完整性,必须实现如下功能: (2)完整性和安全性区别 02:实体完整性-PRIMARY ...

  7. 【Hbu数据库】第七周 数据库完整性 存储过程和函数

    数据库完整性 实体完整性 定义实体完整性 实例完整性检查和违约处理 参照完整性 定义参照完整性 参照完整性检查和违约处理 用户定义完整性 属性上的约束条件 属性上约束条件的定义 元组上的约束条件 完整 ...

  8. 5.0 数据库完整性详解(PRIMARY KEY、REFERENCES、CHECK、CONSTRAINT、DOMAIN、TRIGGER)

    文章目录 0.思维导图 1.数据库完整性概述 2.实体完整性---PRIMARY KEY (1)实体完整性的定义 (2)实体完整性检查和违约处理 2.参照完整性---REFERENCES (1)参照完 ...

  9. SQL语言与数据库完整性和安全性

    数据库完整性和安全性 一.数据库完整性 1.概念 2.约束条件 3.数据库完整性分类 (1) 按约束对象分类 (2) 按约束来源分类 (3)按约束状态分类 二.利用SQL语言实现数据库的静态完整性 1 ...

最新文章

  1. Wireshark抓包工具使用教程以及常用抓包规则
  2. WPF PRISM开发入门一( 初始化PRISM WPF程序)
  3. dos窗口ping命令测试实战
  4. Unity之流光效果
  5. gitlab 将管理员权限移交给ldap账户_CDPDC中Atlas集成FreeIPA的LDAP认证
  6. 26 SD配置-主数据-信用管理-指定信用控制区域及信用部分
  7. SQL CASE 的用法
  8. “我们的边缘计算技术点,可能超前了业界一点”
  9. 模式串匹配的BF算法和KMP算法
  10. Exchange Server 2013安装部署初体验
  11. vue 项目安装axios报错
  12. 飞信2008协议抓包(2)
  13. 微信支付宝无现金之争:瞄准用户支付大数据
  14. idea classes: does not exist的一个原因和解决
  15. SAN和NAS的区别
  16. 关于考研的反省和一些感悟
  17. 如何在 JavaScript 中检查数字是正数还是负数
  18. (CNS复现)CLAM——Chapter_02
  19. 云视频+AI,他如何做到一年200万用户?
  20. 迈普交换机添加用户、授权用户级别及删除用户

热门文章

  1. Makefile wildcard
  2. 用一个简单的例子来阐述强化学习的相关概念(二)
  3. DBA-doing business as
  4. 第 46 届 ICPC 国际大学生程序设计竞赛亚洲区域赛(沈阳)
  5. 做项目的一些心得体会
  6. IT从业者创业公司生存指南:创业初期 ---- 指点江山,激扬文字,粪土当年万户侯
  7. 爬虫-百度安全验证-图片旋转验证-深度学习解决方案
  8. 为什么Java程序员工资高?
  9. java项目----教务管理系统_基于Java的教务管理系统
  10. 树形动态规划之树的最大独立集