MySQL日期时间默认值设定为加上时间间隔

3

是否可以使用NOW()函数并增加10分钟的时间?

我尝试过类似这样的操作:

CREATE TABLE `table1` (
    `date` DATETIME NOT NULL DEFAULT DATE_ADD(NOW(), INTERVAL 10 MINUTE)
);  

然而,它并没有起作用。
3个回答

5

然而,您可以使用插入触发器来实现此目的。将“日期”列的默认值设置为null,并使用

CREATE TRIGGER settime
BEFORE INSERT on table1
FOR EACH ROW BEGIN
    IF new.`date` is null THEN
        SET new.`date` = DATE_ADD(NOW(), INTERVAL 10 MINUTE);
    END IF;
END;

它在第5行显示了错误: SET new.date = DATE_ADD(NOW(), INTERVAL 10 MINUTE); (#1064 - 您的SQL语法有误;请检查与您的MySQL服务器版本相对应的手册,以获取正确的语法使用方法。) - loop
我在Mysql 5.1上进行了测试 - 你使用的是哪个版本?此外,您需要更改表以允许空值,并将默认值设置为null。 - Inca
我已经将默认值设置为NULL并允许为空。版本是-5.5.13。 - loop

5
我不认为你能做到这一点。 MySQL文档指出:
数据类型规范中的DEFAULT值子句表示列的默认值。除了一个例外,该默认值必须是常量;它不能是函数或表达式。这意味着,例如,您不能将日期列的默认值设置为函数NOW()或CURRENT_DATE的值。该例外是,您可以将CURRENT_TIMESTAMP指定为TIMESTAMP列的默认值。

仅供参考,我通常在MariaDB中使用now()作为默认值,但是当表被创建时,它会将其转换为CURRENT_TIMESTAMP。 - DGoiko

0
从MySQL 8.0.13开始,你可以通过将默认表达式用括号括起来来实现这一点。
CREATE TABLE IF NOT EXISTS `datetime_interval_example`
(
  ...
  `later` DATETIME NOT NULL DEFAULT (CURRENT_TIMESTAMP + INTERVAL 10 MINUTE),
  ...
);

链接由@DavidSteele在他们的回答中发布,也证明了这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接