Коли я роблю один рядок INSERTдо таблиці, що містить AUTO_INCREMENTстовпець, я хотів би використовувати LAST_INSERT_ID()функцію для повернення нового AUTO_INCREMENT'ed значення, збереженого для цього рядка.
Оскільки багато розробників та адміністраторів Microsoft SQL Server, без сумніву, усвідомлюють, що еквівалентна функціональність у SQL Server ( SCOPE_IDENTITYі @@IDENTITY) не була без проблем .
Я знаю стан документів MySQL:
Створений ідентифікатор зберігається на сервері на основі кожного з'єднання . Це означає, що значення, повернене функцією даному клієнту, є першим
AUTO_INCREMENTзначенням, сформованим для останнього оператора, що впливає наAUTO_INCREMENTстовпець цього клієнта . На це значення не можуть впливати інші клієнти, навіть якщо вони генеруютьAUTO_INCREMENTвласні значення. Така поведінка гарантує, що кожен клієнт може отримати власний ідентифікатор, не турбуючись про діяльність інших клієнтів та без необхідності блокування чи транзакцій.
і навіть зайти так далеко, щоб сказати:
Використання
LAST_INSERT_ID()таAUTO_INCREMENTстовпці одночасно з декількох клієнтів цілком справедливо.
Чи існують відомі ризики чи сценарії, які можуть спричинити LAST_INSERT_ID()повернення правильного значення?
Я використовую MySQL 5.5 на CentOS 5.5 x64 та Fedora 16 x64 та двигун InnoDB.