2015-06-24 4 views
0

Я пытаюсь написать систему тегов, которую я хочу, чтобы пользователи могли вставлять несколько тегов в текстовый ввод. И затем я хочу вставить каждый тег в tag_table и нужен их идентификатор для хранения в tag_post_table.Как получить последний вставленный идентификатор в несколько записей?

Я знаю, что в нескольких вставках last_insert_id верните первый идентификатор записи. Co можно добавить количество меток в last_insert_id для получения реального последнего идентификатора и использования каждого идентификатора между ними? Является ли это надежным?

Я читал эту статью, но я не понимаю полностью

http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html

+0

Вы можете получить только идентификатор вставки 1-й строки. Возможно, можно убедиться в том, что идентификаторы последовательны, используя опцию 'innodb_autoinc_lock_mode' (и, возможно, другие настройки), но я не пробовал ее, и ее будет сложно проверить правильно. – Vatev

+0

Возможный дубликат http://stackoverflow.com/questions/4637367/mysql-last-insert-id-used-with-multiple-records-insert-statement – P0rnflake

ответ

1

Как я понимаю this article:

С innodb_autoinc_lock_mode набор к 0 («традиционный») или 1 («Последовательный»), значения автоматического прироста, генерируемые любым заданным оператором, будут последовательно, без пробелов, поскольку блокировка AUTO-INC на уровне таблицы сохраняется до конца оператора, и только один такой оператор может выполняться одновременно ,

Установка innodb_autoinc_lock_mode на 0 или 1 гарантирует, что автоматические инертные идентификаторы являются последовательными.

Таким образом, идентификатор, который вы получаете от LAST_INSERT_ID, является первым из новых идентификаторов и LAST_INSERT_ID + «количество затронутых строк» ​​является последним из новых идентификаторов.

Также LAST_INSTERT_ID не зависит от других соединений

Идентификатор, который был сгенерирован сохраняется на сервере на основе каждого соединения. Это означает, что значение, возвращаемое функцией для данного клиента, является первым значением AUTO_INCREMENT, сгенерированным для самого последнего оператора, влияющим на столбец AUTO_INCREMENT этого клиента. Это значение не может повлиять на других клиентов, даже если они генерируют собственные значения AUTO_INCREMENT. Такое поведение гарантирует, что каждый клиент может получить свой собственный идентификатор, не заботясь о деятельности других клиентов, и без необходимости блокировок или транзакций.

Но обратите внимание, что могут быть неправильные результаты, если вы используете INSERT ... ON DUPLICATE KEY UPDATE или INSERT IGNORE .... Но я не проверял это.

Смежные вопросы