我需要触发器在表中的每个insert上添加当前日期(仅日期而不是时间)。
CREATE TRIGGER set_created_date BEFORE INSERT ON people FOR EACH ROW BEGIN SET NEW.created_date = date(); END;
这是我的密码。我做错什么了?谢谢您
ldioqlga1#
为什么是扳机?为什么不把你的 create_date 字段 default now() ```alter table people modify column create_date datetime default now();
create_date
default now()
这里展示了它的工作原理:http://sqlfiddle.com/#!9/50a441/1号
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 命令如下:
DELIMITER
;
DATE
CURDATE
DATE(NOW())
TRIGGER
DEFAULT
created_date
INSERT
INSERT INTO people (name, created_date) VALUES ('John Doe', '2017-02-03');
默认值(当前日期)未设置为列。相反,可用值将设置为列( 2017-02-03 ).这个 TRIGGER 设置当前日期 INSERT . 如果有人执行上述命令 INSERT 命令仍将当前日期设置为 created_date 列(不是 INSERT 命令)。
2017-02-03
2条答案
按热度按时间ldioqlga1#
为什么是扳机?为什么不把你的
create_date
字段default now()
```alter table people modify column create_date datetime default now();
hts6caw32#
您可以使用以下解决方案:
注解/说明:
你需要使用
DELIMITER
所以mysql可以处理;
正确地。这个
DATE
函数提取日期时间值的日期部分。您想设置当前日期以便使用
CURDATE
或者DATE(NOW())
.demo:https://www.db-fiddle.com/f/e96b65hdocubpngobxahik/0
这两者之间的区别
TRIGGER
还有一列DEFAULT
:如果你用的是
DEFAULT
列上的值created_date
只有在上没有为此列提供值时,才会将默认值设置为该列INSERT
. 所以如果有人INSERT
命令如下:默认值(当前日期)未设置为列。相反,可用值将设置为列(
2017-02-03
).这个
TRIGGER
设置当前日期INSERT
. 如果有人执行上述命令INSERT
命令仍将当前日期设置为created_date
列(不是INSERT
命令)。