#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;
Комментариев нет:
Отправить комментарий