Как одновременно добавить данные в две таблицы MySQL?

Как я могу написать запрос для вставки или обновления данных в несколько таблиц с использованием left outer join при условии, что поля исходных таблиц являются уникальными? Как можно объединить все поля при вставке или обновлении данных, учитывая, что неизвестно, в какой таблице будет храниться необходимый набор полей для вставки?
  • 9 апреля 2024 г. 11:19
Ответы на вопрос 2
Для добавления данных одновременно в две таблицы MySQL можно воспользоваться транзакциями. Вот пример кода на SQL:

```
START TRANSACTION;
INSERT INTO table1 (column1, column2) VALUES (value1, value2);
INSERT INTO table2 (column3, column4) VALUES (value3, value4);
COMMIT;
```

Чтобы написать запрос для вставки или обновления данных в несколько таблиц с использованием left outer join, можно воспользоваться следующим синтаксисом:

```
INSERT INTO table1 (column1, column2)
SELECT t1.column1, t2.column2
FROM table1 t1
LEFT JOIN table2 t2 ON t1.common_id = t2.common_id
WHERE t1.common_id = 1;

INSERT INTO table2 (column3, column4)
SELECT t1.column1, t2.column2
FROM table1 t1
LEFT JOIN table2 t2 ON t1.common_id = t2.common_id
WHERE t1.common_id = 1;
```

Чтобы объединить все поля при вставке или обновлении данных, учитывая, что неизвестно, в какой таблице будет храниться необходимый набор полей, можно воспользоваться конструкцией IFNULL() для каждого поля. Например:

```
INSERT INTO table1 (column1, column2, column3)
VALUES (value1, IFNULL(value2, value3), IFNULL(value4, value5));
```

Таким образом, если значение поля value2 равно NULL, то будет использовано значение value3, а если значение поля value4 равно NULL, то будет использовано значение value5.
в какой таблице будет храниться набор необходимых полей для вставки неизвестно

Бред сивой кобылы (извиняюсь). Структура (точные имена полей, и в какой таблице какое поле) обязана быть заранее известна. Даже если используется псевдодинамическая структура на базе EAV или иным способом организованная.

у меня есть 2 таблицы или допустим будет 3 ... Я хочу при выполнении insert into или update использовать эти таблицы

MySQL не реализует одновременную вставку в более чем одну таблицу. А также не реализует использование запроса на вставку в CTE. Напрямую задача не решается.

Правильная реализация - создание хранимой процедуры, которая принимает значения для всех параметров, и выполняет вставку нужных значений в таблицы последовательно выполняемыми запросами, при необходимости получая значения автоинкрементных полей из предыдущей вставки.

Возможная (но нерекомендуемая) реализация - триггер на базовой таблице и передача параметров для подчинённых таблиц через определённые пользователем переменные.
Похожие вопросы