Mysql

MySQL 觸發器:根據列舉類型的 NEW.column 插入

  • December 2, 2019

我正在嘗試向我的一張表添加觸發器。根據新插入行的列舉值,它應該執行不同的insert查詢。我正在使用 phpMyAdmin 並試圖在 SQL-Tab 中執行我的腳本,但它總是得到一個錯誤,它告訴我絕對沒有…

這是我嘗試在 phpMyAdmin 的 SQL 選項卡中執行的 SQL 腳本:

CREATE TRIGGER insert_after_new_kpi_trig
   AFTER INSERT ON KPI
   FOR EACH ROW

   IF NEW.kpi_type = 3 THEN
       INSERT INTO ProjectKPIData (project_id, kpi_id, value) SELECT p.id, NEW.id, 0 FROM Projects;
       INSERT INTO TeamKPIData (team_id, kpi_id, value) SELECT t.id, NEW.id, 0 FROM Teams;
   ELSE IF NEW.kpi_type = 1 THEN
       INSERT INTO TeamKPIData (team_id, kpi_id, value) SELECT t.id, NEW.id, 0 FROM Teams;
   ELSE IF NEW.kpi_type = 2 THEN
       INSERT INTO ProjectKPIData (project_id, kpi_id, value) SELECT p.id, NEW.id, 0 FROM Projects;
   END IF;

這是我得到的錯誤:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6

那麼有人可以告訴我我的腳本是否有問題,或者我是否必須使用string列舉的 -value 而不是index我目前使用的進行比較?感謝您的幫助。

編輯:也許我還應該提到以下列舉是什麼

enum('TEAM', 'PROJECT', 'BOTH')

所以如果我3在 if 條件下使用它應該等於BOTH

我必須使用分隔符才能使其工作,但因為delimiter是 mysql-console 命令,所以將其放入我的腳本中不起作用。

phpMyAdmin 有不同的方式來設置分隔符。在腳本輸入下方有另一個輸入來設置分隔符,所以我的腳本看起來像這樣:

CREATE TRIGGER insert_after_new_kpi_trig
   AFTER INSERT ON KPI
   FOR EACH ROW
   BEGIN
   IF NEW.kpi_type = 3 THEN BEGIN
       INSERT INTO ProjectKPIData (project_id, kpi_id, value) SELECT p.id, NEW.id, 0 FROM Projects p;
       INSERT INTO TeamKPIData (team_id, kpi_id, value) SELECT t.id, NEW.id, 0 FROM Teams t;
       END;
   ELSEIF NEW.kpi_type = 1 THEN
       INSERT INTO TeamKPIData (team_id, kpi_id, value) SELECT t.id, NEW.id, 0 FROM Teams t;
   ELSEIF NEW.kpi_type = 2 THEN
       INSERT INTO ProjectKPIData (project_id, kpi_id, value) SELECT p.id, NEW.id, 0 FROM Projectsp;
   END IF;
   END $$ --Thats the delimiter I set.

引用自:https://dba.stackexchange.com/questions/254358