mysql - 如何添加mysql触发器?

标签 mysql

我需要触发器在我的表中的每个插入上添加当前日期(只有日期而不是时间)。

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

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

最佳答案

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

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())

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


TRIGGER之间的区别和一列 DEFAULT :

如果您在 created_date 列上使用 DEFAULT 值,则只有在 上没有为该列提供值时,才会将默认值设置为该列插入。因此,如果有人像下面这样运行 INSERT 命令:

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

默认值(当前日期)未设置到该列。相反,可用值将设置为列 (2017-02-03)。

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

关于mysql - 如何添加mysql触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51714369/

相关文章:

mysql - 如何选择销量高于历史平均水平的商品

mysql - 在 MySQL 或查询生成器中使用 LEFTJOIN 进行 SELECT 和 COUNT

mysql - Node.js DRY 与 MySQL 客户端

mysql - mysql 查询中包含更多表的日期的 if 条件

mysql - 将 Acronym 字段与 Init Caps 字段进行比较

mysql - 在查询另一个表时将数据导出到配置单元表

php - MySQL - SELECT w/php WHERE 字段类似于数组的任何元素

MySQL 使用 NOT IN 作为临时表

mysql - sqlall 不工作不返回任何内容

MySQL 在连接函数时使用索引