Mysql使用trigger触发器说明

本文通过实战演示了MySQL触发器的创建与使用,详细介绍了如何在更新操作前自动计算平均值,并解决了触发器中常见的更新冲突问题。

由于项目中需要使用到触发器个人就开始简单的了解了一下。但是过程中遇到了几个问题,在此记录一下。

   

前三步先把效果展示出来,后面会对trigger做详细的描述

   

第一步:创建测试表

   

CREATE TABLE `t_triger_test` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`num1` INT(11) DEFAULT NULL,
`num2` INT(11) DEFAULT NULL,
`num3` INT(11) DEFAULT NULL,
`pluses` INT(11) DEFAULT NULL,
`avg` DECIMAL(11,0) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

   

   

第二步:创建触发器trigger

DELIMITER $$

   

CREATE

TRIGGER trigger_testwqq BEFORE UPDATE

ON t_triger_test

FOR EACH ROW BEGIN

IF (NEW.num1 <> 0 AND NEW.num2 <> 0 AND NEW.num3 <> 0) THEN

SET NEW.AVG = (NEW.num1+NEW.num2+NEW.num3+NEW.pluses) / 4;

END IF;

END$$

   

DELIMITER ; 

第三步:填写测试数据测试

   

   

   

Trigger介绍

  1. 什么是trigger?

    个人简单的将trigger理解为在某种情况下可以根据我们设置的条件去自动触发某种动作的机制。

  2. trigger语法

   

CREATE

TRIGGER 触发器名称 BEFORE/AFTER UPDATE/INSERT/DELETE

ON 表名

FOR EACH ROW BEGIN

//sql逻辑语句

END$$

   

DELIMITER ;

   

---------------------------字段说明--------------------------

  1. BEFORE/AFTER:设置触发器执行在事件发生的前与后。
  2. INSERT/UPDATE/DELETE:定义触发器触发的事件,可以是插入更新和删除。
  3. ON 表名:将触发器应用在哪个表上。
  4. FOR EACH ROW:触发器执行的间隔。每行都执行,叫行级触发器。不是必须的
  5. BEGIN/END:开始和结束,中间包括sql的判断和执行语句等。

       

      

   

   

  1. trigger中遇到的一个问题
    1. Can't update table 't_triger_test' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
      1. 解决办法:问题的出现是由于在创建触发器的时候sql语句的问题

         

       

       

       

       

转载于:https://www.cnblogs.com/tianliuyang/p/10244038.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值