Страницы

Поиск по вопросам

среда, 18 марта 2020 г.

Добавление записи в две связанные таблицы

#sql


Объясните пожалуйста, как добавить запись в SQL БД в две таблицы со связью "один-к-одному"?

Очевидный вариант - добавить INSERT'ом в одну таблицу, получить SELECT'ом primary
key, добавить INSERT'ом в другую. Но он выглядит, мягко говоря, не очень оптимально
- аж три запроса. А если добавятся ещё связанные таблицы?..
    


Ответы

Ответ 1



INSERT может вставить данные только в одну таблицу. Если хотите в коде клиента написать меньше запросов, напишите триггер на основной таблице и/или хп, если требуется передать значения.

Ответ 2



Элегантное решение: INSERT INTO foo (auto,text) VALUES(NULL,'text'); # generate ID by inserting NULL INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text'); # use ID in second table источник

Ответ 3



При создании записи можно получить последний автосгенерированный id. Например, в PHP для таких целей есть функция mysqli_insert_id().

Ответ 4



Как вариант для id использовать guid и получить уникальность априори, потеряв правда в скорости... (тут смайлик, скривившийся как от зубной боли). Но это так, в порядке полноты возможностей...

Ответ 5



На PostgreSQL можно: INSERT INTO table1 (field_name) VALUES (value) RETURNING id; При этом вместо id можно вернуть любой столбец. А потом гнать ещё один INSERT. Или INSERT INTO table1 (field_name) VALUES (value); INSERT INTO table2 (id) SELECT table1.id from table1 where field_name=value; На MariaDB,например, в PHP mysqli есть $mysqli->insert_id;

Комментариев нет:

Отправить комментарий