Не удается вставить в таблицу с сохраненным сгенерированным первичным ключом - PullRequest
0 голосов
/ 10 мая 2019

Я не могу вставить данные в таблицу с сгенерированным сохраненным первичным ключом.

Мой стол:

CREATE TABLE `living_complex` (
  `id` bigint(32) GENERATED ALWAYS AS (`location_id`) STORED NOT NULL,
  `location_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unq_living_complex_name` (`name`),
  KEY `idx_living_complex_location_id` (`location_id`),
  KEY `idx_living_complex_name` (`name`),
  CONSTRAINT `fk_living_complex_location_id` FOREIGN KEY (`location_id`) REFERENCES `location` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Моя вставка:

INSERT INTO `reeve`.`living_complex` (`location_id`, `name`) 
                         VALUES ('1', 'some_living_complex');

Ошибка:

1048: столбец 'id' не может быть пустым

У меня нет ключевого слова NOT NULL в операторе создания. Почему он запрашивает идентификатор?

1 Ответ

0 голосов
/ 10 мая 2019

Понял. Произошла ошибка в триггере

CREATE DEFINER=`root`@`localhost` TRIGGER `reeve`.`trg_living_complex_object_id` BEFORE INSERT ON `living_complex` FOR EACH ROW
BEGIN
    INSERT INTO `reeve`.`object` (
        `id`,
        `object_type_id`
    )
    VALUES (
        new.id, 
        (SELECT `object_type`.`id` FROM `reeve`.`object_type` WHERE `table_name` = 'living_complex')
    );
END

Что должно быть ПОСЛЕ вставки. Потому что у меня нет NEW.id (сгенерированного выражением), пока я не вставлю.

...