dimastik1986
@dimastik1986
учусь

Возможно реализовать запрос на запись в несколько табл?

Приветствую! Можно ли одним запросом сделать запись в несколько разных табл, получить insert_id каждой вставки, и как итог занести их в основную табл, в которой хочу хранить индексы(связи). Или по какой схеме это правильнее организовать?
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
qant
@qant
programer
Нет, вы не можете вставить в несколько таблиц в одной команде MySQL. Однако вы можете использовать транзакции.

BEGIN;
INSERT INTO users (username, password)
  VALUES('test', 'test');
INSERT INTO profiles (userid, bio, homepage) 
  VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com');
COMMIT;


Посмотрите на LAST_INSERT_ID () (dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html) для повторного использования значений автоинкремента.

Есть 3 возможных способа: в коде, который вы видите выше. Это делает все это в MySQL, и LAST_INSERT_ID () во втором операторе автоматически будет значением столбца автоинкремента, который был вставлен в первый оператор. К сожалению, когда второй оператор сам вставит строки в таблицу со столбцом автоинкремента, LAST_INSERT_ID () будет обновлен до таблицы 2, а не таблицы 1.

Если вам все еще понадобится таблица 1, мы получим хранить его в переменной. Это приводит нас к способам 2 и 3: запаковать LAST_INSERT_ID () в переменную MySQL:
INSERT ...
SELECT LAST_INSERT_ID() INTO @mysql_variable_here;
INSERT INTO table2 (@mysql_variable_here, ...);
INSERT INTO table3 (@mysql_variable_here, ...);


Запишет LAST_INSERT_ID () в переменную php (или на любой язык, который может подключаться к базе данных по вашему выбору): INSERT ... Используйте ваш язык для получения LAST_INSERT_ID (), либо выполнив этот литерал в MySQL, либо используя, например, mysql_insert_id () php, который делает это для вас, INSERT [используйте вашу переменную php здесь].
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mad_maximus
@mad_maximus
Транзакции.
Ответ написан
Комментировать
NeiroNx
@NeiroNx
Программист
Posgresql умеет, а Mysql нет
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы