SQL-запрос не работает на RDS - PullRequest
0 голосов
/ 05 июля 2018

Использование MySQL 5.6.40

Это определение таблицы:

CREATE TABLE IF NOT EXISTS `updated_tables` (
  `table_name` VARCHAR(50) NOT NULL,
  `updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  PRIMARY KEY (`table_name`),
  UNIQUE INDEX `table_name_UNIQUE` (`table_name` ASC))
  ENGINE = InnoDB;

Это запрос (сгенерированный Sequalize):

INSERT INTO `updated_tables` (`table_name`,`updated_at`) VALUES ('workdamnit',NULL) ON DUPLICATE KEY UPDATE `table_name`=VALUES(`table_name`), `updated_at`=VALUES(`updated_at`);

Упрощенная форма того же запроса:

INSERT INTO `updated_tables` (`table_name`,`updated_at`) VALUES ('workdamnit',NULL) 

И он производит следующую запись в таблице:

table_name: workdamnit

updated_at: 2018-07-05 14: 27: 17.142494

Теперь к вопросу.

Использование MySQL 5.6.39-log на AWS RDS

выдает эту ошибку: Код ошибки: 1048. Столбец updated_at не может быть пустым

Это потому, что версии MySQL немного отличаются, или это связано с RDS?

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Во время создания вашей таблицы вы упомянули в своей колонке следующее: updated_at:

  1. Не разрешать NULL
  2. Если ничего не указано, используйте CURRENT_TIMESTAMP(6) по умолчанию.

Следовательно, он выдает ошибку, когда вы вставляете NULL в свой запрос.

Итак, если я понимаю, что вы пытаетесь сделать правильно, это должен быть ваш запрос:

INSERT INTO `updated_tables` (`table_name`) VALUES ('workdamnit')

вместо

INSERT INTO `updated_tables` (`table_name`,`updated_at`) VALUES ('workdamnit',NULL)

Надеюсь, это поможет

0 голосов
/ 06 июля 2018

После некоторых исследований я нашел ответ. Экземпляр RDS имеет строгий режим, включенный по умолчанию, поэтому он отвечал правильно. В то время как мой локальный экземпляр, а также экземпляр MySQL на EC2, не использовали строгий режим.

0 голосов
/ 05 июля 2018

Вы пытаетесь INSERT NULL в поле, которое не позволяет это. Кроме того, это поле имеет значение по умолчанию. так что вы можете просто попробовать:

INSERT INTO `updated_tables` (`table_name`) VALUES ('workdamnit') ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...