在MySQL中创建表时,是否也有可能将CURRENT_TIMESTAMP添加6个月?如果可以,怎么办?将数据插入表中时,我能够做到这一点,但我希望它能自动将自身添加到表中。 像这样:
CREATE TABLE IF NOT EXISTS promos
(
expiryDateOfReward DATETIME NOT NULL DEFAULT DATE_ADD(MONTH, 6, CURRENT_TIMESTAMP)
);
答案 0 :(得分:4)
我认为MySQL不支持日期/时间的默认值表达式。
更多最新版本支持生成的列。这允许您执行以下操作:
CREATE TABLE IF NOT EXISTS promos
(
createdAt datetime default CURRENT_TIMESTAMP,
expiryDateOfReward DATETIME generated always as (createdAt + interval 6 month)
);
还要注意,添加六个月的语法适用于MySQL。
答案 1 :(得分:4)
MySQL不支持默认值的日期/时间表达式。
但是您可以为此使用触发器。
CREATE TRIGGER setExpiryDateOfReward
BEFORE INSERT ON promos
FOR EACH ROW SET NEW.expiryDateOfReward = NEW.expiryDateOfReward + INTERVAL 6 MONTH;
参见演示https://www.db-fiddle.com/f/gBHjoNC5jMUeJ89Ya2MujS/0
从Gordon Linoff生成的列是一个更合适的答案,但要求MySQL的最低版本为5.7
触发解决方案要求最低MySQL版本为5.1