Коли я роблю один рядок 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.