|
|
|
| Ситуация: регистрация пользователей.
Новый пользователь добавляется в таблицу users (автоинкрементируемое поле id_user, как одно из полей таблицы). Одновременно нужно добавить и принадлежность данного пользователя к одной из групп пользователей (member). Для этого существует другая таблица user_group с двумя колонками: id_user и id_group. По умолчанию для этой таблицы в поле id_group установлено значение 3 (группа members).
Таким образом, нужно выполнить вставку данных в две таблицы. Я просто выполняю два запроса. При этом во втором запросе использую функцию LAST_INSERT_ID(), чтобы получить id именно последнего добавленного пользователя. Вот мои запросы:
# Добавляем нового пользователя в БД
mysql_query("INSERT INTO `users` SET `user_login`='".$login."', `user_password`='".$password."', `user_date_reg`=NOW()");
# Вносим пользователя в группу members (по умолчанию)
mysql_query("INSERT INTO `user_group` SET `id_user`=LAST_INSERT_ID();");
|
Вопрос: насколько корректно использовать указанную функцию в моем случае? Интересует с точки зрения вероятности одновременной регистрации нескольких пользователей - не будет ли тут сбоя с занесением данных во вторую таблицу?
Спасибо. | |
|
|
|
|
|
|
|
для: baston
(01.06.2010 в 12:50)
| | не будет.
То, что Вы написали - канонический пример применения функции LAST_INSERT_ID()
Если, конечно, закрыть глаза на некошерный синтаксис оператора INSERT.
C другой стороны, в кошерном варианте языка и функции-то такой нет :) | |
|
|
|
|
|
|
|
для: baston
(01.06.2010 в 12:50)
| | Не будет, так как для каждого соединения (которое происходит при выполнении скрипта регистрации) создается отдельная сессия MySQL, в рамках которой и происходит вызов функции LAST_INSERT_ID(). Она возвратит в точности прошлый идентификатор вставленной записи за данную сессию-подключение.
Другое дело, если вы вставляете в две таблицы до вызова LAST_INSERT_ID(), но и в данном случае она вернет последний ИД. Просто нужно быть внимательнее с последовательностью вставки. | |
|
|
|