1. 程式人生 > >Mysql使用trigger觸發器說明

Mysql使用trigger觸發器說明

由於專案中需要使用到觸發器個人就開始簡單的瞭解了一下。但是過程中遇到了幾個問題,在此記錄一下。

   

前三步先把效果展示出來,後面會對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語句的問題