У меня есть таблица MySQL, к которой прикреплен триггер, который регистрирует изменения в этой таблице во второй
CREATE TRIGGER log_table BEFORE UPDATE ON table1
FOR EACH ROW BEGIN
INSERT INTO log_table(filed) VALUES(NEW.field);
END;
//
Теперь, если я выполняю INSERT INTO table1 из PHP вызов mysqli_insert_id()
после этого.
Будет ли это вернуть новый идентификатор в таблице1? Или новый идентификатор в log_table?
LAST_INSERT_ID()
Вызывается после того, как оператор INSERT вернет новый идентификатор в table1 (из оператора INSERT), а не в log_table (из триггера).
Это задокументировано в разделе руководства LAST_INSERT_ID:
В теле хранимой процедуры (процедуры или функции) или
триггер, значение LAST_INSERT_ID () изменяется так же, как и для
заявления выполняются вне тела этих видов объектов.
влияние хранимой процедуры или триггера на значение
LAST_INSERT_ID (), который видят следующие операторы, зависит от
вид рутины:
Если хранимая процедура выполняет операторы, которые изменяют значение
LAST_INSERT_ID (), измененное значение видно по операторам, которые следуют
вызов процедуры.Для хранимых функций и триггеров, которые изменяют значение, значение
восстанавливается после завершения функции или триггера, поэтому следуйте инструкциям
не увидит измененное значение.
Других решений пока нет …