使用当前时间戳作为默认值的时间戳添加

时间:2019-07-02 10:21:52

标签: mysql mysql-workbench

当要将新条目插入表中时,我想在当前时间戳上添加+ 1天。我通常会在PHP中通过添加插入前的时间来完成此操作,但我想尝试仅使用MySQL并将该时间戳记设置为 default 值。 我尝试执行以下操作:

TIMESTAMPADD(DAY,1,CURRENT_TIMESTAMP)

enter image description here

Executing SQL script in server
ERROR: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'TIMESTAMPADD(DAY,1,CURRENT_TIMESTAMP) COMMENT 'Timestamp request token time',
  ' at line 8
SQL Code:

-- -----------------------------------------------------
-- Table `new_db`.`reset_tokens`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `new_db`.`reset_tokens` (
  `reset_id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Reset ID',
  `users_user_id` INT UNSIGNED NOT NULL COMMENT 'FK User ID',
  `user_reset_token` CHAR(30) NULL COMMENT 'Reset character string (30)',
  `user_ts_expiration` TIMESTAMP NOT NULL DEFAULT TIMESTAMPADD(DAY,1,CURRENT_TIMESTAMP) COMMENT 'Timestamp request token time',
  PRIMARY KEY (`reset_id`, `users_user_id`),
  UNIQUE INDEX `user_reset_token_UNIQUE` (`user_reset_token` ASC),
  INDEX `fk_reset_tokens_users1_idx` (`users_user_id` ASC),
  CONSTRAINT `fk_reset_tokens_users`
    FOREIGN KEY (`users_user_id`)
    REFERENCES `new_db`.`users` (`user_id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'Reset tokens / forget password'

我不确定为什么它不起作用,但是也许这只是错误的方法。任何/更好的选择都受到高度赞赏。

编辑

因此,我检查了“目标MySQL版本”,并说“ 8.0.16”(InnoDB引擎)。事实是,将其更改为例如10.1.34会产生一整套新问题。

编辑2 我将版本更改为10.1.34并解决了一些问题,但是关于TIMESTAMPADD(DAY,1,CURRENT_TIMESTAMP),它仍然给出了相同的错误(尝试CURRENT_TIMESTAMP()时并没有改变)。

让我清楚一点,我不是要设置SELECT,而是要将其设置为DEFAULT值。

2 个答案:

答案 0 :(得分:1)

我想您的MariaDB版本尚不支持使用CURRENT_TIMESTAMP作为默认值和/或使用函数作为默认值。来自documentation

  

从10.0.1开始的MariaDB
  CURRENT_TIMESTAMP也可以用作DATETIME的默认值

     

从MariaDB 10.2.1开始,您可以在DEFAULT中使用大多数功能。

您需要运行MariaDB 10.2.1或更高版本,才能使默认逻辑正常工作。

答案 1 :(得分:0)

SELECT TIMESTAMPADD(DAY,1,CURRENT_TIMESTAMP());对我来说没问题。

据我所知,您只是忘记在CURRENT_TIMESTAMP的末尾添加()。我还在开头添加了一个选择,因为您没有提供完整的查询,所以我只使用了我能想到的最简单的完整查询。

如果仍然无法解决问题,那么我建议您按照错误提示进行操作,并检查您的MariaDB版本以查看是否支持这些功能。