我通过终端使用MySql。下面是我用来创建表的命令,但它在YYYY-MM-DD HH中显示日期:MM:SS(例如:2018-05-25 14:12:47)
create table test (foo int, ts timestamp default CURRENT_TIMESTAMP);
但我希望默认情况下每次以(YYYY-MM-DD)格式插入数据时都需要昨天日期。
请帮我找到命令。
谢谢, 阿米特
答案 0 :(得分:0)
根据官方MySQL文档https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add,您可以这样做:
如果你想存储"昨天"在创作:
ts TIMESTAMP NOT NULL DEFAULT NOW() - INTERVAL 1 DAY
如果你想存储"昨天"在每次更新时:
ts TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW() - INTERVAL 1 DAY
根据这个答案Select records from NOW() -1 Day:
NOW()返回DATETIME。
INTERVAL的工作方式如命名,例如: INTERVAL 1天= 24小时。
因此,如果你的脚本是cron要在03:00运行,它将错过第一个 来自最古老的'的三小时记录一天。
要获得全天使用CURDATE() - INTERVAL 1天。这会得到 不管什么时候回到前一天的开头 脚本运行。
希望它有所帮助!
答案 1 :(得分:0)
MySQL中的DEFAULT值必须是常量。它们不能是函数或表达式(CURRENT_TIMESTAMP除外)。
来源:http://dev.mysql.com/doc/refman/5.6/en/data-type-defaults.html
此外,您可以根据需要为表添加触发器
简单地创建一个没有约束的表
create table test (foo int, ts timestamp );
然后为此表添加触发器
CREATE TRIGGER settime
BEFORE INSERT on test
FOR EACH ROW BEGIN
IF new.`ts ` is null THEN
SET new.`ts ` = DATE_ADD(NOW(), INTERVAL -1 DAY);
END IF;
END;