簡體   English   中英

UPDATE TRIGGER 中的“WHERE”條件給出語法錯誤:mysql 5.7 版

[英]'WHERE' condition in an UPDATE TRIGGER giving syntax error :mysql version 5.7

我正在使用 mysql 數據庫(版本 5.7)。

我使用以下 CREATE 命令創建了一個表:

CREATE TABLE `attendance` (
  `id` varchar(11) NOT NULL,
  `hash` char(8) NOT NULL,
  `time_in` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `time_out` datetime DEFAULT NULL,
  `time_spent` time DEFAULT NULL,
  `purpose` char(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我有一個帶有以下查詢的觸發器:

DELIMITER $$

CREATE TRIGGER test_trigger 
BEFORE UPDATE ON attendance 
FOR EACH ROW 
BEGIN 
SET NEW.time_spent=TIMEDIFF(NEW.time_out,OLD.time_in) WHERE OLD.time_spent IS NULL; 
END$$

DELIMITER ;

但是mysql給出了以下錯誤:

ERROR 1064 (42000): 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 'WHERE OLD.time_spent IS NULL; END' at line 1

( where 條件確保只有當前天記錄得到更新)

我應該如何編寫查詢?

不能在觸發器內使用帶有SETWHERE子句。 使用IF代替:

DELIMITER $$

CREATE TRIGGER test_trigger 
BEFORE UPDATE ON attendance 
FOR EACH ROW 
BEGIN
    IF OLD.time_spent IS NULL THEN
        SET NEW.time_spent = TIMEDIFF(NEW.time_out, OLD.time_in);
    END IF;
END$$

DELIMITER ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM