- 论坛徽章:
- 0
|
CREATE TRIGGER
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON
FOR EACH ROW
1.命名规则: 触发器必须有名字,最多64个字符,可能后面会附有分隔符.他和MySQL中其他对象的命名方式基本相象
2.触发时间: 触发器有执行的时间配置:能够配置为事件发生前或后
3.事件:同样也能设定触发的事件:他们能够在执行insert、update或delete的过程中触发
4.表:触发器是属于某一个表的:当在这个表上执行插入、更新或删除操作的时候就导致触发器的激活.
我们不能给同一张表的同一个事件安排两个触发器
5.( 步长)触发间隔:触发器的执行间隔:FOR EACH ROW子句通知触发器每隔一行执行一次动作,而不
是对整个表执行一次。
6.语句:触发器包含所要触发的SQL语句:这里的语句能够是任何合法的语句,包括复合语句,但是这里的语句
受的限制和函数的相同。
您必须拥有相当大的权限才能创建触发器(CREATE TRIGGER)。
假如您已是Root用户,那么就足够了。这跟SQL的标准有所不同。
示例:
mysql> DELIMITER //
mysql>
mysql> CREATE TABLE t22 (s1 INTEGER)//
CREATE TRIGGER t22_bi
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TRIGGER t22_bi
-> BEFORE INSERT ON t22
-> FOR EACH ROW
-> BEGIN
-> SET @x = 'Trigger was activated!';
-> SET NEW.s1 = 55;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> INSERT INTO t22 VALUES (1)//
Query OK, 1 row affected (0.00 sec)
让我们看假如向表t2中插入一行数据触发器对应的表会怎么样? 这里的插入的动作是很常见的,我们无需触发器的权限来执行他。甚至无需知道是否有触发器关联。
mysql> SELECT @x, t22.* FROM t22//
+------------------------+------+
| @x | s1 |
+------------------------+------+
| Trigger was activated! | 55 |
+------------------------+------+
1 row in set (0.00 sec)
mysql>
说明:
在最开始我创建了一个名字为t22的表,然后在表t22上创建了一个触发器t22_bi,当我们要向表中的行插入时,触发器就会被激活,执行将s1列的值改为55的动作。
大家能够看到INSERT动作之后的结果,和我们预期的相同,x标记被改变了,同时这里插入的数据不是我们开始输入的插入数据,而是触发器自己的数据。
对于INSERT语句,只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句能够在和NEW连同OLD同时使用
=====================================================================
参考文档
http://www.sudu.cn/info/html/edu/mysql/20071109/97075.html
=====================================================================
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/66227/showart_1007441.html |
|