Insert into select удаляет ли данные во вставляемую таблицу?
например есть запрос:
insert into table_input select * from table_output
я так понял данный запрос вставляет данные из таблцы table_output в таблицу table_input.
Вопрос, а если данные в table_input уже имеются, то бд перезапишет абсолютно все данные или просто добавит новые?
к примеру table_input была запись с description = "hello world"
а в таблице table_output description = "hello world 2"
в итоге в table_input будет 2 записи или 1?
Дополнительно:
Зависит от ключей на полях. Может не вставить, если например ид автоинкриментный
Поможет insert ignore
Отвечая на вопрос перепишет или добавит - зависит от опции ON CONFLICT или ON MATCHED и от функций которы будут указаны в кейсах.
если данные в table_input уже имеются, то бд перезапишет абсолютно все данные или просто добавит новые?
В том виде как написано - просто добавит новые. И как для любого инсерт может упасть с ошибкой, если добавляемые данные нарушают целостность (условия констрейнтов). Хоть в MySQL, хоть в PostgreSQL, хоть в Oracle. А ignore, on conflict, on duplicate - это уже будет другой запрос.
2 записи... INSERT вставляет записи в таблицы, не меня существующие
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Insert into select в SQL не удаляет данные из вставляемой таблицы перед вставкой новых данных. Этот оператор просто добавляет новые строки в таблицу на основе выбранных данных из другой таблицы.
Пример использования оператора Insert into select в PHP:
INSERT INTO table1 (column1, column2) SELECT column3, column4 FROM table2 WHERE conditions;
В этом примере мы выбираем данные из таблицы table2 и вставляем их в таблицу table1. Данные из table2 не удаляются при выполнении этого запроса.
Если вам нужно очистить таблицу перед вставкой новых данных, вам следует использовать оператор TRUNCATE перед Insert into select. Например:
TRUNCATE TABLE table1; INSERT INTO table1 (column1, column2) SELECT column3, column4 FROM table2 WHERE conditions;
Этот код сначала очистит таблицу table1 перед вставкой новых данных из table2.
Таким образом, оператор Insert into select не удаляет данные во вставляемую таблицу. Если вам нужно очистить таблицу перед вставкой новых данных, используйте оператор TRUNCATE перед Insert into select.