当要将新条目插入表中时,我想在当前时间戳上添加+ 1天。我通常会在PHP中通过添加插入前的时间来完成此操作,但我想尝试仅使用MySQL并将该时间戳记设置为 default 值。 我尝试执行以下操作:
TIMESTAMPADD(DAY,1,CURRENT_TIMESTAMP)
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
值。
答案 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版本以查看是否支持这些功能。