Влияют ли триггеры ДО ОБНОВЛЕНИЯ на результаты mysqli_insert_id?

У меня есть таблица 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?

0

Решение

LAST_INSERT_ID() Вызывается после того, как оператор INSERT вернет новый идентификатор в table1 (из оператора INSERT), а не в log_table (из триггера).

Это задокументировано в разделе руководства LAST_INSERT_ID:

В теле хранимой процедуры (процедуры или функции) или
триггер, значение LAST_INSERT_ID () изменяется так же, как и для
заявления выполняются вне тела этих видов объектов.
влияние хранимой процедуры или триггера на значение
LAST_INSERT_ID (), который видят следующие операторы, зависит от
вид рутины:

  • Если хранимая процедура выполняет операторы, которые изменяют значение
    LAST_INSERT_ID (), измененное значение видно по операторам, которые следуют
    вызов процедуры.

  • Для хранимых функций и триггеров, которые изменяют значение, значение
    восстанавливается после завершения функции или триггера, поэтому следуйте инструкциям
    не увидит измененное значение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]