2013-04-19 3 views
1

У меня есть две таблицы:MySQL: Скопировать из 1 таблицы в другую, не переписывая существующие?

  1. tableOriginal
  2. tableBackup

Они имеют точно такую ​​же структуру.

Я хочу оператор SQL, который я могу запускать в любое время дня, которое скопирует все строки из tableOriginal в tableBackup БЕЗ перезаписи элементов в tableBackup. В принципе, эта команда должна синхронизировать tableBackup с tableOriginal.

Как это сделать?

ответ

4
INSERT INTO tableBackup(SELECT * FROM tableOriginal) 

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

+0

Хотя, если существует первичный ключ или другие уникальные ограничения, это может стать немного более сложным. –

+0

Да, это правда, я только что упомянул об этом в редактировании моего ответа –

+0

Я только хочу добавить данные, которые еще не находятся в новой таблице резервного копирования ... никаких изменений, поэтому я считаю, что это сработает? И он не будет копировать данные дважды, не так ли? – coderama

2

Почему вы не удалять первые все данные в tableBackup, то ВСТАВКУ в данные в tableOriginal к tableBackup

DELETE FROM tableBackup 
INSERT INTO tableBackup(SELECT * FROM tableOriginal) 

Почему мы должны удалить первый? Потому что, если мы собираемся вставить уникальные данные в tableBackup, следующий раз, когда мы вставляем это не будет выполняться, потому что мы будем вставлять/добавить некоторые данные, которые уже были там ..

Надеется, что вы получите то, что я я пытаюсь сказать.

+0

Это кажется лучшим вариантом. Если вы просто вставьте, вы получите новые записи. Что делать, если обновляется старая запись? Что, если структура изменится кстати? Используйте; CREATE TABLE tableBackup SELECT * FROM tableBackup – SativaNL

+0

Это предложение аннулирует самый простой запрос, который OP сделал 'не переписывая существующие (данные)? '. Также обратите внимание, что слово 'unique' не использовалось OP –

+0

, на самом деле все мы знаем, существует множество способов решить его проблему .. в основном, если OP просто хочет сделать резервную копию своей исходной базы данных ... просто вставка будет просто прекрасной, но он заполнит tableBackup теми же данными, если у него нет столбца uniqe .., который не очень-то хорош. И я думаю, что удаление сначала перед вставкой было бы самым простым способом. просто чтобы избежать конфликтов в уникальных данных .. – Keensleeeeeeee

Смежные вопросы