2013-01-28 4 views
0

У меня есть таблица users, которая имеет auto-incrementing id column. Для каждого нового пользователя мне необходимо вставить три строки в три разные таблицы: 1. user, 2. user_content и 3. user_preferences. Строки, вставленные в user_content и user_preferences ссылаются на их id-х, которые соответствуют идентификатору каждого пользователя (проводится в user)MySQL. Должен ли я использовать last_insert_id()? или что-то другое?

Как это сделать?

Должен ли я сделать запрос INSERT INTO user первым, получая, что автоинкрементных id с last_insert_id(), а затем два других INSERT INTO запросов с использованием полученного идентификатора пользователя? Или, есть ли более сжатый способ сделать это?

(примечание:. Я использую MySQL и PHP, и если это имеет значение, я использую bigint для хранения id значений во всех трех таблицах)

Спасибо!

+0

* Первый *, заставить его работать, * затем * сделать его быстрым. Самый оптимизированный код не будет стоить символов, используемых для его написания, если он не делает правильные вещи. – hd1

+0

Да, действительно, но я стараюсь «дважды измерять, разрезать один раз», когда делаю такие вещи. – JohnZ

ответ

2

Подход, который вы описали (сначала введите user, возьмите результат last_insert_id() и используйте его для вставки в две другие таблицы) вполне разумно; Я не вижу в этом ничего плохого.

Возможно, было бы технически возможно объединить три запроса и использовать функцию MySQL LAST_INSERT_ID() для вставки значений в две другие таблицы, но это было бы значительно более сложным без каких-либо соответствующих преимуществ. Другими словами, это не стоит делать.

1

Я вижу 3 варианта:

  1. PHP стороне, используя некоторые *_last_insert_id (как вы описали)
  2. Создать триггер
  3. использовать хранимую процедуру.
Смежные вопросы