MySQL触发器-'if'条件问题

时间:2019-09-22 14:43:54

标签: mysql sql

每次在表中进行“更新”时,我都想在“日期”列中插入今天的日期,但前提是此单元格包含“ 0000-00-00”

我正在尝试以下代码:

IF (OLD.date = '0000-00-00') THEN SET NEW.date = now()

我收到此错误:You have an error in your SQL syntax...

怎么了?我想我已经尝试了所有:/

//编辑

整个查询:

CREATE TRIGGER `my_name` 
BEFORE INSERT ON `my_database` 
FOR EACH ROW 
    IF (OLD.date = '0000-00-00') THEN SET NEW.date = now()
  

错误:INSERT触发器上没有OLD行

如果我仅添加以下内容:

CREATE TRIGGER `my_name` 
BEFORE INSERT ON `my_database` 
FOR EACH ROW SET NEW.date = now()

一切都很好...

1 个答案:

答案 0 :(得分:0)

答案在于the documentation

  

INSERT触发器中,只能使用NEW.col_name;没有旧行了。

代码的其他问题:

  • 您在代码块周围缺少BEGINEND;关键字
  • IF块必须以END IF;终止

您的触发器应表示如下:

CREATE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW 
BEGIN
    IF NEW.date = '0000-00-00' THEN
        SET NEW.date = NOW();
    END IF;
END;

Demo on DB Fiddle

-- create a test table
CREATE TABLE my_table(id int primary key, `date` DATE);

-- create the trigger
DELIMITER //
CREATE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW 
BEGIN
    IF NEW.date = '0000-00-00' THEN
        SET NEW.date = NOW();
    END IF;
END;
//

-- insert a record with date value  '000-00-00'
INSERT INTO my_table (id, `date`) values (1, '0000-00-00');

-- check the content of the table
SELECT * FROM my_table;

| id  | date       |
| --- | ---------- |
| 1   | 2019-09-23 |