Как пропустить дубликаты записей при импорте в phpmyadmin
У меня есть db на моей локальной машине, и я хочу импортировать данные в db на моем хостинге. Оба db идентичны, те же table names
, column names
и т.д.
Когда я export
таблица из моего локального db через phpmyadmin
и import
через phpmyadmin на моем хостинге появляется ошибка, сообщающая мне, что есть дубликаты записей для primary key
и останавливает всю операцию.
Как импортировать данные через phpmyadmin, пропустить дубликаты записей и отобразить список дубликатов в конце процесса?
Решение, которое я могу сделать, это вызвать все значения первичного ключа в db на моем хостинге и фильтровать дубликаты перед импортом. НО мне интересно, есть ли быстрое решение для этого с phpmyadmin?
Ответы
Ответ 1
В phpMyAdmin на вкладке "Параметры" вы можете попробовать проверить следующие значения:
- Настройки → SQL-запросы → Игнорировать ошибки нескольких операторов
Если вы используете формат CSV:
- Настройки → Импорт → CSV → Не прерывать ошибку INSERT
Если вы используете формат SQL:
- Настройки → Экспорт → SQL → Использовать игнорировать вставки
Ответ 2
Существует несколько способов сделать то, что вы хотите:
Брутальный способ:
TRUNCATE TABLE yourTbl; -- emtpies out the table
Затем импортируйте, но вы можете потерять данные, поэтому, возможно, создайте таблицу резервного копирования. Все рассмотренные вещи, просто не делайте этого, проверьте альтернативы, перечисленные ниже:
Напишите свой собственный запрос INSERT
с предложением IGNORE
:
INSERT IGNORE INTO yourTbl -- as shown in the linked duplicate
Но, поскольку вы импортируете файл, запрос, скорее всего, будет LOAD DATA [LOCAL] INFILE
. Как вы можете видеть в руководстве, вы можете легко добавить IGNORE
к этому запросу:
LOAD DATA LOCAL INFILE '/path/to/files/filename1.csv' IGNORE -- IGNORE goes here
INTO TABLE your_db.your_tbl
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(`field1`,`field2`);
Что это. Не беспокойтесь, если вы не слишком удобно писать свои собственные запросы, есть другие способы делать то, что вы хотите:
Способ CLI:
mysqlimport -i dbname fileToImport
# Or
mysqlimport --ignore dbname fileToImport
Также CLI, создайте файл, содержащий запрос LOAD DATA
выше, а затем:
$: mysql -u root -p
*********** #enter password
mysql> source /path/to/queryFile.sql
Для этого вам необходимо иметь доступ к командной строке и запустить эту команду Здесь страница руководства MySQL
Используя phpMyAdmin, при импорте вы найдете флажок "Игнорировать дубликаты", проверьте его и импортируйте. Здесь страница со скриншотами
Вы также можете выбрать "Игнорировать ошибки", но это еще один подход грубой силы, и я бы не рекомендовал этого.