Каким образом можно импортировать только строки, которых нет в таблице, с использованием резервной копии?

Как восстановить записи в таблице sql из экспортированного бекапа таким образом, чтобы сохранить новые данные и восстановить отсутствующие данные, пропавшие после удаления? Какие инструменты есть в MySQL для выполнения этой операции?
  • 7 ноября 2023 г. 6:40
Ответы на вопрос 2
Для импорта только отсутствующих строк с использованием резервной копии в MySQL можно воспользоваться оператором INSERT IGNORE. Этот оператор позволяет вставить строки в таблицу, игнорируя строки с дублирующимся ключом.

Пример использования оператора INSERT IGNORE при импорте данных из резервной копии:

```
LOAD DATA INFILE '/path/to/backup/file.txt'
IGNORE
INTO TABLE your_table
FIELDS TERMINATED BY ','
(enc_col1, enc_col2, enc_col3);
```

Где:
- /path/to/backup/file.txt - путь к файлу резервной копии
- your_table - название таблицы, в которую нужно импортировать данные
- enc_col1, enc_col2, enc_col3 - названия столбцов, в которые нужно импортировать данные

Чтобы восстановить записи в таблице SQL из экспортированной резервной копии таким образом, чтобы сохранить новые данные и восстановить отсутствующие данные, можно выполнить следующие шаги:

1. Создайте новую временную таблицу, которая будет содержать все поля, в том числе идентификаторы, из вашего экспортированного файла.
2. Загрузите данные из резервной копии в эту временную таблицу с помощью оператора LOAD DATA INFILE.
3. Используйте операторы INSERT IGNORE или INSERT ... ON DUPLICATE KEY UPDATE, чтобы вставить данные из временной таблицы в основную таблицу. Новые записи будут вставлены, а существующие записи будут обновлены (если указано).

Пример использования оператора INSERT ... ON DUPLICATE KEY UPDATE при восстановлении данных из резервной копии:

```
INSERT INTO your_table (id, col1, col2)
SELECT id, col1, col2 FROM temp_table
ON DUPLICATE KEY UPDATE col1 = VALUES(col1), col2 = VALUES(col2);
```

Где:
- your_table - название основной таблицы, в которую нужно восстановить данные
- temp_table - название временной таблицы, содержащей данные из резервной копии
- id, col1, col2 - названия столбцов, которые нужно восстановить

Таким образом, можно восстановить отсутствующие данные и сохранить новые данные из резервной копии.
- Остановите работу с базой данных перед началом процесса разделения.
- Настройте внешние ключи с использованием on update cascade для связей, имеющих первичный ключ с автоинкрементом.
- Перенесите записи, созданные после разделения баз данных, на значения первичного ключа, которые больше, чем максимальное значение в бэкапе.
- Импортируйте бэкап, используя операцию insert ignore вместо обычного insert, чтобы избежать дублирования данных.
- Убедитесь, что генерация автоинкремента настроена правильно, выполнив соответствующие изменения в таблице.
Похожие вопросы