Будет ли PDO LastInsertID нарушать репликацию AWS? - PullRequest
0 голосов
/ 04 сентября 2018

Использует ли функция PDO lastinsertid функцию MySQL last_insert_id?

Меня особенно интересует репликация с AWS и в соответствии с инструкцией AWS с использованием некоторых функций MySQL прерывания репликации:

Другие распространенные ситуации, которые могут вызвать ошибки репликации, включают следующее: ... Использование небезопасных недетерминированных запросов

В руководстве mysql говорится, что используемые мной функции на самом деле небезопасны:

Недетерминированные функции, не считающиеся небезопасными

Я планирую переписать мои now() способы использования, но я не уверен, как мне избежать last_insert_id, так как PDO, а не я, запрашиваю это. Я не могу сделать отдельный select, потому что, скорее всего, insert был запущен параллельно, и я верну неправильный идентификатор.

1 Ответ

0 голосов
/ 04 сентября 2018

Функция MySQL LAST_INSERT_ID(), различные привязки (например, PDO) и базовая функциональность являются детерминированными. Вы можете использовать их с уверенностью.

Например, это является детерминированным и будет работать везде.

  INSERT INTO master (address, town) VALUES('150 Broadway', 'New York');
  INSERT INTO detail (master_id, item) VALUES (LAST_INSERT_ID(), 'pepperoni pizza');

Это не так. Это то, против чего вас предупреждают.

  INSERT INTO master (address, town) VALUES('150 Broadway', 'New York');
  SELECT @id := MAX(master_id) FROM master;   /* bad bad bad */
  INSERT INTO detail (master_id, item) VALUES (@id + 1 'pepperoni pizza');
...