如何添加mysql触发器?

7gyucuyw  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(315)

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

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

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

ldioqlga

ldioqlga1#

为什么是扳机?为什么不把你的 create_date 字段 default now() ```
alter table people modify column create_date datetime default now();

这里展示了它的工作原理:http://sqlfiddle.com/#!9/50a441/1号
hts6caw3

hts6caw32#

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

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 函数提取日期时间值的日期部分。
您想设置当前日期以便使用 CURDATE 或者 DATE(NOW()) .
demo: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 命令)。

相关问题