现在的位置: 首页 > 综合 > 正文

mysql 触发器

2014年01月02日 ⁄ 综合 ⁄ 共 1668字 ⁄ 字号 评论关闭

为什么要用触发器
:

我们曾经许诺支持所有ANSI
标准的特性。

您可以使用它来检查或预防坏的数据进入数据库。

您可以改变或者取消INSERT, UPDATE
以及
DELETE
语句。

您可以在一个会话中监视数据改变的动作。

触发器的语法:

CREATE TRIGGER trigger_name trigger_time trigger_event

ON tbl_name FOR EACH ROW trigger_stmt

其中trigger_name
标识触发器名称,用户自行指定;

trigger_time标识触发时机,用
before

after
替换;

trigger_event标识触发事件,用
insert

update

delete
替换;

tbl_name标识建立触发器的表名,即在哪张表上建立触发器;

trigger_stmt是触发器程序体;触发器程序可以使用
begin

end
作为开始和结束,中间包含多条语句;

例子:

下面是根据字段改变来存入另外一张表中简单的例子

CREATE TRIGGER user_TRIGGER after update ON  user FOR EACH ROW 

BEGIN

     IF OLD.grade <> NEW.grade THEN     

        IF NEW.grade = 1 THEN        

           INSERT INTO inform(title, introduce, admin_id, create_time, state, user_id) VALUES('用户等级变更
', '
尊敬的用户您现在是普通会员
', 0, current_timestamp, 1, NEW.id);           

        END IF;           

        IF NEW.grade = 2 THEN        

           INSERT INTO inform(title, introduce, admin_id, create_time, state, user_id) VALUES('用户等级变更
', '
尊敬的用户您现在是白银会员
', 0, current_timestamp, 1, NEW.id);           

        END IF;         

        IF NEW.grade = 3 THEN        

           INSERT INTO inform(title, introduce, admin_id, create_time, state, user_id) VALUES('用户等级变更
', '
尊敬的用户您现在是金卡会员
', 0, current_timestamp, 1, NEW.id);           

        END IF;         

        IF NEW.grade = 4 THEN        

           INSERT INTO inform(title, introduce, admin_id, create_time, state, user_id) VALUES('用户等级变更
', '
尊敬的用户您现在是钻石会员
', 0, current_timestamp, 1, NEW.id);           

        END IF; 

     END IF;

END

上述触发器实例使用了OLD
关键字和
NEW
关键字。
OLD

NEW
可以引用触发器所在表的某一列


old是改变之前字段的值,
new
可以表示改变之后的值。

SHOW TRIGGERS from SF_User like "usermaps%";
 //查看
SF_User
库上名称和
usermaps%
匹配的触发器

SHOW TRIGGERS;
       //查看所有触发器

DROP TRIGGER [schema_name.]trigger_name
  删除触发器

【上篇】
【下篇】

抱歉!评论已关闭.