Insert into select удаляет ли данные во вставляемую таблицу?

Ссылка скопирована
1 ответ

например есть запрос:
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

  • Автор как всегда не указал тип DBMS который на самом деле используется. Дело в том что оператор UPSERT (update + insert) имеет разные реализации в разных коммерческих системах. По синтаксису разные. Поэтому обсуждать в обобщенном SQL это безсмысленно. Но если-бы это был Oracle то я-бы предложил использовать MERGE https://docs.oracle.com/database/121/SQLRF/stateme... а для Postgres там другая форма синтаксиса.

    Отвечая на вопрос перепишет или добавит - зависит от опции ON CONFLICT или ON MATCHED и от функций которы будут указаны в кейсах.

  • если данные в table_input уже имеются, то бд перезапишет абсолютно все данные или просто добавит новые?

    В том виде как написано - просто добавит новые. И как для любого инсерт может упасть с ошибкой, если добавляемые данные нарушают целостность (условия констрейнтов). Хоть в MySQL, хоть в PostgreSQL, хоть в Oracle. А ignore, on conflict, on duplicate - это уже будет другой запрос.

  • 2 записи... INSERT вставляет записи в таблицы, не меня существующие

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Никита Орлов Ответ

    Insert into select в SQL не удаляет данные из вставляемой таблицы перед вставкой новых данных. Этот оператор просто добавляет новые строки в таблицу на основе выбранных данных из другой таблицы.

    Пример использования оператора Insert into select в PHP:

    INSERT INTO table1 (column1, column2)
    SELECT column3, column4
    FROM table2
    WHERE conditions;

    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;

    TRUNCATE TABLE table1; INSERT INTO table1 (column1, column2) SELECT column3, column4 FROM table2 WHERE conditions;

    Этот код сначала очистит таблицу table1 перед вставкой новых данных из table2.

    Таким образом, оператор Insert into select не удаляет данные во вставляемую таблицу. Если вам нужно очистить таблицу перед вставкой новых данных, используйте оператор TRUNCATE перед Insert into select.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно