mysql触发器


--------------------------------------mysql触发器------------------------
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。

触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。

1. 语法
CREATE TRIGGER <触发器名称>
  { BEFORE | AFTER } 
  { INSERT | UPDATE | DELETE } 
  ON <表名称> 
  FOR EACH ROW 
  <触发器SQL语句> 
 

2. 旧和新创建的列的标识
对于INSERT语句, 只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在
和NEW以及OLD同时使用。下面是一个UPDATE中同时使用NEW和OLD的例子。 
CREATE TABLE t22 (s1 INTEGER);
insert into t22 values(55);

CREATE TRIGGER t21_au 
BEFORE UPDATE ON t22 
FOR EACH ROW 
BEGIN 
  SET @old = OLD . s1; 
  SET @new = NEW.s1; 
END;//  

现在如果t21表中的s1列的值是55,那么执行了"UPDATE t21 SET s1 = s1 + 1"之后@old的值会变成
55,而@new的值将会变成56。
 
 
CREATE TRIGGER t22_bi 
BEFORE INSERT ON t22 
FOR EACH ROW 
BEGIN 
  SET @x = 'Trigger was activated!'; 
  SET NEW.s1 = 55; 
END;// 


mysql> INSERT INTO t22 VALUES (1)// 
 
让我们看如果向表t2中插入一行数据触发器对应的表会怎么样?
 
 
mysql> SELECT @x, t22.* FROM t22// 
+------------------------+------+ 
| @x                     | s1   | 
+------------------------+------+ 
| Trigger was activated! |   55 | 
+------------------------+------+ 
1 row in set (0.00 sec) 
 
大家可以看到INSERT动作之后的结果,和我们预期的一样,x标记被改动了,同时这里插入的数据不是
我们开始输入的插入数据,而是触发器自己的数据。

 


 

你可能感兴趣的:(sql,mysql)