Как получение последнего идентификатора вставки 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 в транзакцию? Это не вызывает каких-либо видимых ошибок (надеюсь, не связанных с проблемой, указанной выше), но следует ли ее удалить?
Спасибо.