Mysql 触发器

触发器是一个特殊的存储过程,不同的是存储过程要用CALL来调用,而触发器不需要使用CALL

也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MYSQL自动调用。

创建触发器

语法如下:

CREATE TRIGGER trigger_name /*触发器名称*/
  trigger_time /*触发程序的时间*/
trigger_event  /*激活触发程序的事件类型*/
ON table_name /*针对的表名*/FOR EACH ROW trigger_stmt /*sql事件*/

触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。

触发程序与命名为table_name的表相关。table_name必须引用永久性表。不能将触发程序与临时表表或视图关联起来。

trigger_time:取值可以是BEFORE或者是AFTER,它是触发程序的动作时间,指明触发程序是在激活它的语句之前或之后执行。

trigger_event:取值可以是INSERT,UPDATE,DELETE!指明了激活触发程序的语句的类型。

     INSERT:将新行插入表时激活触发程序,例如,通过INSERTLOAD DATAREPLACE语句。

  UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。

    DELETE:从表中删除某一行时激活触发程序,例如,通过DELETEREPLACE语句。

注意:

       对于具有相同触发程序动作时间和事件的给定表,不能有两个触发程序。

      例如,对于某一表,不能有两个BEFORE UPDATE触发程序。

     但可以有1个BEFORE UPDATE触发程序和1个BEFORE INSERT触发程序,或1个BEFORE UPDATE触发程序和1个AFTER UPDATE触发程序。

trigger_stmt:是当触发程序激活时执行的sql语句。:如果你打算执行多个语句,可使用BEGIN ... END复合语句结构。这样,就能使用存储子程序中允许                        的相同语句。

1.创建一个单执行语句的触发器

DROP TRIGGER IF EXISTS t_beforeinsert_on_trexpert;
CREATE TRIGGER t_beforeinsert_on_trexpert 
BEFORE INSERT ON trexpert
FOR EACH ROW
BEGIN
     	SET @num=0;

    	SELECT sort INTO @num FROM trexpert ORDER BY sort DESC LIMIT 1;

    	SET new.sort=@num+1;
END;
DROP TRIGGER IF EXISTS t_beforeinsert_on_trexpert;
CREATE TRIGGER t_beforeinsert_on_trexpert 
BEFORE INSERT ON trexpert
FOR EACH ROW
BEGIN
     	SET @num=0;

    	SELECT MAX(sort) INTO @num FROM trexpert;

    	SET new.sort=@num+1;
END;

2.创建有多个执行语句的触发器,语法如下:

CREATE TRIGGER t_beforeinsert_on_triggertest 
BEFORE INSERT ON triggertest
  FOR EACH ROW BEGIN
    INSERT INTO triggertest2 SET testNumber = NEW.testId;
    DELETE FROM triggertest3 WHERE testId= 1;  
    UPDATE triggertest4 SET testNumber = 3 + 1 WHERE testName='测试';
  END
3. 查看触发器

查看触发器是指数据库中已存在的触发器的定义、状态、语法信息等。可以使用:SHOW TRIGGERS 


4.删除触发器

DROP TRIGGER trigger_name;
DROP TRIGGER IF EXISTS t_beforeinsert_on_trexpert;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值