Как получение последнего идентификатора вставки mysql работает с транзакциями? + транзакционные вопросы

Вопрос из двух частей:

В моем скрипте CodeIgniter я запускаю транзакцию, затем вставляю строку, устанавливаю insert_id () в переменную php, вставляю больше строк в другую таблицу, используя новый идентификатор в качестве внешнего ключа, а затем фиксирую все.

Поэтому мой вопрос: если все не фиксируется до завершения транзакции, как mysql может вернуть последний идентификатор вставки, если ничего не было вставлено? Мой скрипт работает (почти) отлично, с новым идентификатором, используемым в последующих запросах.

(Я говорю «почти», потому что, используя драйвер PDO mysql, иногда первая вставка, которая должна вернуть insert_id (), дублируется - она вставляется дважды. Любая идея, почему это будет? Это связано с получением последней ID? Это никогда не происходит, если используется драйвер mysqli или mysql.)

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

if(!$this->db->insert($table, $data)) {
    //log message here
}

Как это влияет на процесс mysql после того, как я завернул весь свой код mysql в транзакцию? Это не вызывает каких-либо видимых ошибок (надеюсь, не связанных с проблемой, указанной выше), но следует ли ее удалить?

Спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос