触发程序
2015-11-02 19:56
375 查看
1.CREATETRIGGER语法
CREATETRIGGERtrigger_nametrigger_timetrigger_event
ONtbl_nameFOREACHROWtrigger_stmt
触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。
触发程序与命名为tbl_name的表相关。tbl_name必须引用永久性表。不能将触发程序与TEMPORARY表或视图关联起来。
trigger_time是触发程序的动作时间。它可以是BEFORE或AFTER,以指明触发程序是在激活它的语句之前或之后触发。
trigger_event指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:
·INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOADDATA和REPLACE语句。
·UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。
·DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。
2.[b]
1.先创建4个数据表
CREATETABLEtest1(a1INT); CREATETABLEtest2(a2INT); CREATETABLEtest3(a3INTNOTNULLAUTO_INCREMENTPRIMARYKEY);//表三的a3为主码,自增 CREATETABLEtest4( a4INTNOTNULLAUTO_INCREMENTPRIMARYKEY, b4INTDEFAULT0//表4的b4默认都为0 );
2.触发器testref的定义
DELIMITER| CREATETRIGGERtestrefBEFOREINSERTONtest1 FOREACHROWBEGIN INSERTINTOtest2SETa2=NEW.a1;//把数据表1的数据复制到数据表2 DELETEFROMtest3WHEREa3=NEW.a1;//删除数据表3中与表1相同的数据 UPDATEtest4SETb4=b4+1WHEREa4=NEW.a1;//把数据表4b4的相应内容在原基础上加1,条件为与表1a1相同的数据项 END | DELIMITER;
3.给表3,表4插入数据。
INSERTINTOtest3(a3)VALUES (NULL),(NULL),(NULL),(NULL),(NULL), (NULL),(NULL),(NULL),(NULL),(NULL);
INSERTINTOtest4(a4)VALUES (0),(0),(0),(0),(0),(0),(0),(0),(0),(0);
如果将下述值插入表test1,如下所示:
mysql>INSERTINTOtest1VALUES
->(1),(3),(1),(7),(1),(8),(4),(4);
QueryOK,8rowsaffected(0.01sec)
Records:8Duplicates:0Warnings:0
那么4个表中的数据如下:
mysql>SELECT*FROMtest1;
+------+
|a1|
+------+
|1|
|3|
|1|
|7|
|1|
|8|
|4|
|4|
+------+
8rowsinset(0.00sec)
mysql>SELECT*FROMtest2;
+------+
|a2|
+------+
|1|
|3|
|1|
|7|
|1|
|8|
|4|
|4|
+------+
8rowsinset(0.00sec)
mysql>SELECT*FROMtest3;
+----+
|a3|
+----+
|2|
|5|
|6|
|9|
|10|
+----+
5rowsinset(0.00sec)
mysql>SELECT*FROMtest4;
+----+------+
|a4|b4|
+----+------+
|1|3|
|2|0|
|3|1|
|4|2|
|5|0|
|6|0|
|7|1|
|8|1|
|9|0|
|10|0|
+----+------+
10rowsinset(0.00sec)
使用别名OLD和NEW,能够引用与触发程序相关的表中的列。OLD.col_name在更新或删除它之前,引用已有行中的1列。NEW.col_name在更新它之后引用将要插入的新行的1列或已有行的1列。
激活触发程序时,对于触发程序引用的所有OLD和NEW列,需要具有SELECT权限,对于作为SET赋值目标的所有NEW列,需要具有UPDATE权限。
相关文章推荐
- CDS 未对齐访问异常
- 计算机网络
- 复制构造和重载()的区别
- Node.js中处理异步编程(使用回调处理一次性事件,使用事件监听器处理重复性事件)
- oracle物理视图(转)
- 如何查询端口号和网址的ip地址?
- Android开发在路上:少去踩坑,多走捷径
- Unix IPC进程间通信
- Android JNI 机制
- 最新版SDWebImage的使用 -- 推荐 - 高效
- linux常用命令touch,cat,tac,more,less,head,tail
- C# web 链接数据库问题二三 (二)
- Java list容器
- 潘丽云:魏尔斯特拉斯的复变函数思想分析(2009)(2011-01-14 22:34:30)
- oracle事物总结(转)
- logback logback.xml 常用配置详解
- oracle学习笔记--SQLPlus命令
- Android自定义View入门
- Eclipse 编写java时, 出现的库访问限制问题
- Web Navigation