Отметка времени с текущей отметкой времени в качестве значения по умолчанию - PullRequest
1 голос
/ 02 июля 2019

Я хочу добавить + 1 день к текущей отметке времени , когда новая запись вставляется в таблицу.Хотя обычно я делаю это в PHP, добавляя время перед вставкой, я хочу попробовать использовать MySQL и установить эту метку времени в качестве значения по умолчанию .Я пытался сделать следующее:

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'

Я не совсем уверен, почему это не работает, номожет быть, это просто неправильный способ сделать это.Любые / лучшие альтернативы высоко ценятся.

РЕДАКТИРОВАТЬ

Итак, я проверил "Target MySQL version" и он сказал "8.0.16" (движок InnoDB).Дело в том, что изменение его, например, на 10.1.34 создает целый ряд новых проблем.

РЕДАКТИРОВАТЬ 2 Я изменил версию на 10.1.34 и решил некоторые проблемы, но в отношении TIMESTAMPADD(DAY,1,CURRENT_TIMESTAMP), все равно выдает ту же ошибку (не имеет значения, когда я пытаюсь CURRENT_TIMESTAMP()).

Позвольте мне прояснить, я не пытаюсь SELECT, я хочу установить егокак DEFAULT значение.

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Я думаю, что ваша версия MariaDB еще не поддерживает использование CURRENT_TIMESTAMP в качестве значения по умолчанию и / или использование функций в качестве значений по умолчанию.Из документации :

MariaDB начиная с 10.0.1CURRENT_TIMESTAMP также может использоваться в качестве значения по умолчанию для DATETIME

. В MariaDB 10.2.1 вы можете использовать большинство функций в DEFAULT.

Возможно, вам потребуется запустить MariaDB версии 10.2.1 или более поздняя, ​​чтобы работала логика по умолчанию.

0 голосов
/ 02 июля 2019

SELECT TIMESTAMPADD(DAY,1,CURRENT_TIMESTAMP()); для меня это не проблема.

Насколько я могу судить, вы просто забыли добавить () в конец CURRENT_TIMESTAMP.Я также добавил выбор в начало, потому что вы не предоставили целый запрос, поэтому я просто выбрал самый простой полный запрос, о котором я только мог подумать.

Если это по-прежнему не работает, то я рекомендую вам выполнить какошибка предлагает и проверьте вашу версию MariaDB, чтобы увидеть, если эти функции поддерживаются.

...