数据库应用技术项目化教程-龙浩-8 触发器和事务.pptxVIP

  • 0
  • 0
  • 约5.28千字
  • 约 28页
  • 2023-04-18 发布于浙江
  • 举报

数据库应用技术项目化教程-龙浩-8 触发器和事务.pptx

;学习目标; 触发器是一种与表操作(INSERT、UPDATE、DELETE)有关的数据库对象。触发器定义了一系列操作,这一系列操作称为触发程序。当触发器所在表上出现INSERT、UPDATE以及DETETE操作时,将激活触发器,即表的操作事件触发表上的触发程序的执行。 触发器基于一个表创建,但是可以针对多个表进行操作,所以触发器可以用来对表实施复杂的完整性约束。;触发器具有以下优点: (1)触发器自动执行。当对表进行INSERT、 UPDATE以及DETETE操作,试图修改表中的数据时,相应操作的触发器立即自动执行。 (2)触发器可以通过数据库中相关表进行层叠更改。这比直接把代码写在前台的做法更安全合理。 (3)触发器可以实现用CHECK约束实现不了的复杂约束。与CHECK约束相比,触发器可以引用其他表中的列。 (4)触发器可以维护冗余数据,实现外键级联选项等。 ;CREATE TRIGGER语句语法格式如下: CREATE TRIGGER 触发器名 AFTER/BEFORE INSERT/UPDATE/DELETE ON 表名 FOR EACH ROW BEGIN SQL语句; END; ;需要说明的是: (1)触发器是数据库对象,因此创建触发器时,需要指定该触发器属于哪一个数据库。 (2)触发器是在表是创建的。这个表必须是基表,不能是临时表,也不能是视图。 (3)MySQL的触发事件有三种:INSERT、UPDATE及DELETE。 INSERT:将新记录插入表时激活触发程序。 UPDATE:更改表中的记录时激活触发程序。 DELETE:从表中删除记录叶激活触发程序。 (4)触发器的触发时间有两种:BEFORE和AFTER。 BEFORE表示在触发事件发生之前执行触发程序,AFTER表示在触发事件发生之后执行触发程序。 ;(5)FOR EACH ROW表示行级触发器。 目前,MySQL仅支持行级触发器,不支持语句级别的触发器。FOR EACH ROW表示INSERT、UPDATE及DELETE操作影响的每一条记录都会执行一次触发程序。 (6)触发程序中的SELECT语句不能产生结果集。 (7)触发程序中可以使用old关键字与new关键字。 ① 当向表中插入新记录时,在触发程序中可以使用new关键字表示新记录。当需要访问新记录中的某个字段时,可以使用“new.字段名”进行访问。 ② 当从表中删除某条旧记录时,在触发程序中可以使用old??键字表示旧记录。当需要访问旧记录中的某个字段时,可以使用“old.字段名”进行访问。 ;③当修改表中的某条记录时,在触发程序中可以使用new关键字表示修改后的记录。使用old关键字表示修改前的记录。当需要访问修改后的记录中的某个字段时,可以使用“new.字段名”进行访问。当需要访问旧记录中的某个字段时,可以使用“old.字段名”进行访问。 ④old记录是只读的,在触发程序中只能引用它,但不能更改它。在BEFORE触发程序中,可使用“SET new.字段名=值”更改new记录的值。但在AFTER触发程序中,不能使用“SET new.字段名=值”更改new记录的值。 ⑤对于INSERT操作,只有new是合法的。对于DELETE操作,只有old是合法的。对于UPDATE操作,new和old都是合法的。;一、使用触发器实现检查约束 使用触发器实现检查约束,在向学生信息表tb_xsxxb表插入记录时,XBDM字段的值或者为空,或者必须是1或2。如果XBDM字段的值不满足要求,则将XBDM的值改成为空(NULL)。 对应的SQL语句如下: DELIMITER // CREATE TRIGGER tr_insert BEFORE INSERT ON tb_xsxxb FOR EACH ROW BEGIN IF(new.XBDM IS NULL || new.XBDM NOT in (1,2)) THEN SET new.XBDM = NULL; END IF; END; // ;使用触发器实现检查约束,在对学生信息表tb_xsxxb修改记录时,修改的记录XBDM字段的值或者为空,或者是1或2。如果XBDM字段的值不满足要求,则记录不能修改。 ;二、使用触发器维护冗余数据 使用触发器实现:当学生信息表tb_xsxxb中的性别代码修改为1时,则将该条记录的学号、姓名、性别代码字段值放到tb_xsxxb_ns表中。 DELIMITER // CREATE TRIGGER tr_update_ns AFTER UPDATE on tb_xsxxb FOR EACH ROW BEGIN IF (new.XBDM=1

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档