У меня есть таблица 1, в которой есть id как автоинкремент. Таблица 2 имеет отношение внешнего ключа к таблице 1, в которой мне нужно, чтобы значение, полученное из таблицы 1, было вставлено в таблицу 2
-- Trigger DDL Statements DELIMITER $$ USE `baemer_emr`$$ CREATE TRIGGER `baemer_emr`.`after_insert_log` AFTER INSERT ON `baemer_emr`.`table1` FOR EACH ROW BEGIN INSERT INTO table2 VALUES (last_insert_id() , something); END$$
Он работает, но показывает номер раньше. Например
Вставить в таблицу 1, id = 15. В таблице 2 возвращается 14. Любые идеи?
В триггере у вас есть две виртуальные таблицы, называемые NEW
и OLD
Вы можете использовать эту виртуальную таблицу для получения вновь вставленных значений.
Виртуальная таблица OLD
работает только в триггерах UPDATE
и DELETE
.
И триггер DELETE не имеет таблицы NEW
.
-- Trigger DDL Statements DELIMITER $$ USE `baemer_emr`$$ CREATE TRIGGER after_insert_log AFTER INSERT ON table1 FOR EACH ROW BEGIN INSERT INTO table2 VALUES (NEW.id, something); END$$
Обратите внимание, что NEW.id
_ (предполагая, что id является полем auto_increment) _ еще не будет установлен в триггер before insert
, только один из этих небольших ошибок, которых следует избегать.