如何添加mysql触发器?

时间:2018-08-06 19:22:56

标签: mysql

我需要触发器在表中的每个插入项上添加当前日期(仅日期而非时间)。

CREATE TRIGGER set_created_date
BEFORE INSERT ON people
FOR EACH ROW BEGIN
SET NEW.created_date = date();
END;

这是我的代码。我做错了什么?谢谢

2 个答案:

答案 0 :(得分:3)

您可以使用以下解决方案:

USE db_name; -- or select the database with script / tool

DELIMITER |

CREATE TRIGGER set_created_date BEFORE INSERT ON people 
FOR EACH ROW 
BEGIN 
    SET NEW.created_date = CURDATE(); 
END;
|

DELIMITER ;

注释/解释:

  • 您需要使用DELIMITER,这样MySQL才能正确处理;
  • DATE函数提取日期时间值的日期部分。
  • 您要设置当前日期,以便可以使用CURDATEDATE(NOW())
  

演示: https://www.db-fiddle.com/f/e96B65hDocUBpNgobXaHiK/0


TRIGGER与列DEFAULT之间的区别:

如果您在列DEFAULT上使用created_date值,则仅当INSERT上没有为该列提供值时,才将默认值设置为该列。因此,如果有人运行INSERT命令,如下所示:

INSERT INTO people (name, created_date) VALUES ('John Doe', '2017-02-03');

未将默认值(当前日期)设置为该列。而是将可用值设置为列(2017-02-03)。

TRIGGER设置每个INSERT的当前日期。如果有人执行上述INSERT命令,则仍将当前日期设置为created_date列(而不是INSERT命令提供的值)。

答案 1 :(得分:1)

为什么要触发?为什么不设置您的create_date字段default now()

 alter table people modify column create_date datetime default now();

此处显示了其工作原理:http://sqlfiddle.com/#!9/50a441/1