十二、触发器

一、创建触发器
触发器(trigger)是个特殊的存储过程,不同的是,执行存储过程是要使用call语句来调用,而触发器的执行不需要使用call语句来调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MySQL自动调用。
  创建一个触发器的语法如下:
            create  trigger trigger_name trigger_time trigger_event
                      on tb1_name for each row trigger_stmt
     其中trigger_name标识触发器名称,用户自行指定;trigger_time标识触发时机,可以指定为before或after;trigger_event标识触发事件,包括insert、update和delete;tb1_name标识建立触发器的表名,即在哪张表上建立触发器;trigger_stmt是触发器程序体。触发器程序可以使用begin和end作为开始和结束,中间包含多条语句。

1.1创建只有一个执行语句的触发器

create trigger ins_sum before insert on accout
 for each row set @sum=@sum+new.amount

1.21.1创建有多个执行语句的触发器

DELIMITER $$
USE `test` $$
DROP TRIGGER IF EXISTS after_insert_on_t_wechat $$
CREATE TRIGGER after_insert_on_t_wechat 
    AFTER INSERT ON t_wechat
    FOR EACH ROW BEGIN
    SET @count = (SELECT COUNT(*) FROM t_wechat_lastRecord WHERE userName = new.userName); 
    IF @count=0 THEN
    INSERT INTO t_wechat_lastRecord VALUES(new.userName,new.sendById,new.createTime,new.content,new.trMode);
    ELSE 
    UPDATE t_wechat_lastRecord SET sendById=new.sendById,createTime=new.createTime,trMode=new.trMode WHERE userName=new.userName;
    END IF;
    END ;
    $$
DELIMITER ;

二、查看触发器
2.1 show triggers 查看触发器:show triggers;该语句查看当前创建的所有触发器信息。

2.2 在triggers表中查看触发器信息  : select * from information.schema.triggers where condition

三、触发器的使用:触发程序是与表有关的命名数据库对象,当表上出现特定事件(insert、update或delete)时,将激活该对象。

四、删除触发器
  语法: drop trigger [schema_name.]trigger_name
其中,schema_name表示数据库名称,是可选的,如果省略了schema,将从当前数据库中舍弃触发程序;trigger_name是要是要删除的触发器的名称
 

注意:1.使用触发器时须特别注意。
       在使用触发器的时候需要注意,对于相同的表,相同的事件只能创建一个触发器,比如对表accout创建了一个before insert触发器,那么如果对表account再次创建一个before insert触发器,MySQL将会报错,此时,只可以在表account上创建after insert或者before update类型的触发器。灵活地运用触发器将为操作省去很多麻烦。

        2.及时删除不再需要的触发器
       触发器定义之后,每次执行触发事件,都会激活触发器并执行触发器中的语句。如果需求发生变化,而触发器没有进行相应的改变或删除,则触发器仍然会执行旧的语句,从而影响新的数据的完整性。因此,要将不再使用的触发器及时删除。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值