phpMyAdmin экспорт / импорт приводит к дублированию ошибки первичного ключа - PullRequest
3 голосов
/ 02 мая 2011

Я хочу глобально заменить все экземпляры URL моего сайта в базе данных Wordpress MySQL новым URL сайта.Для этого я использую phpMyAdmin для экспорта базы данных в файл .sql, затем выполняю глобальную замену в текстовом редакторе, а затем использую phpMyAdmin для импорта файла .sql.

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

Я благодарен за любую помощь в решении этой проблемы.

--
-- Dumping data for table `wp_comments`
--
INSERT INTO  `wp_comments` 
  (`comment_ID`, `comment_post_ID`, `comment_author`, `comment_author_email`
  ,`comment_author_url`, `comment_author_IP`, `comment_date`, `comment_date_gmt` 
  ,`comment_content`, `comment_karma`, `comment_approved`, `comment_agent` 
  ,`comment_type`, `comment_parent`, `user_id`) 
VALUES (1, 1, 'Mr WordPress', ''
       ,'http://wordpress.org/', '', '2011-04-28 00:49:55', '2011-04-28 00:49:55'
       ,'Hi, this is a comment.<br />To delete a comment, 
         just log in and view the post&#039;s comments. 
         There you will have the option to edit or delete them.'
       , 0, 'post-trashed',  '',  '', 0, 0 ) ;

MySQL said: 

#1062 - Duplicate entry '1' for key 'PRIMARY' 

Ответы [ 8 ]

6 голосов
/ 02 мая 2011

Исходные данные все еще находятся в базе данных.

Если вы работали вручную, вы бы отправили запрос UPDATE, а не INSERT с новыми значениями, но, поскольку вы выполняете пакетный импорт, может быть лучше очистить существующую таблицу до того, как импорт.

DELETE FROM `tblName`;

Сначала сделайте резервную копию ваших данных.

2 голосов
/ 21 июня 2015

Чтобы избежать дублирования, вы должны использовать UPDATE вместо операторов INSERT.Чтобы добиться этого в phpMyAdmin, выполните следующие действия:

  1. Выберите базу данных в дереве.
  2. ДОПОЛНИТЕЛЬНО.Перейдите на вкладку «Поиск» и найдите строку, которую хотите заменить во всех таблицах.Если строка найдена только в нескольких таблицах, запишите их имена.Это поможет ускорить процесс, обновляя только те таблицы, которые необходимо обновить.Это может быть важно, если у вас много данных.
  3. Перейдите на вкладку «Экспорт».
  4. В разделе «Метод экспорта:» выберите «Пользовательский».
  5. ДОПОЛНИТЕЛЬНО.Если вы отметили таблицы, которые необходимо обновить на шаге 2 выше, то в разделе «Таблицы:» нажмите «Отменить выбор всех», а затем выберите только таблицы, которые необходимо обновить.
  6. Прокрутите внизв разделе «Параметры создания данных» и в раскрывающемся окне с надписью «Функция для использования при сбрасывании данных:» выберите «ОБНОВЛЕНИЕ» (по умолчанию «ВСТАВИТЬ»).
  7. Нажмите «Перейти».
  8. Откройте загруженный файл дампа SQL.
  9. ВАЖНО!Сохраните файл с новым именем для резервного копирования, прежде чем вносить какие-либо изменения.
  10. Используйте функцию поиска и замены вашего редактора, чтобы изменить то, что вы хотите.Затем сохраните файл.
  11. В phpMyAdmin перейдите на вкладку «Импорт».
  12. В разделе «Файл для импорта:» нажмите кнопку «Выбрать файл» и найдите отредактированный файл.Нажмите GO

Вы готовы!Чтобы проверить, все ли в порядке, выполните поиск в базе данных второй раз (повторите шаг 2).Вы не должны найти таблицы, содержащие вашу старую строку.

2 голосов
/ 02 мая 2011

Если вы экспортируете, это означает, что основное содержимое остается в базе данных.Поэтому, когда вы пытаетесь вставить новую строку с тем же PRIMARY KEY, который всегда УНИКАЛЬНЫ, вы получите ошибку.

Решение: вы должны удалить строку из таблицы с тем же comment_ID.Вы должны открыть PHPMyAdmin и перейти на страницу таблицы и проверить строку с нужным ID.В данном случае это 1, что означает, что это, вероятно, на первой странице результатов вашего списка таблиц.Просто нажмите на красную букву X, которая появляется в строке.

Это также может быть сделано с помощью SQL, который также может быть простым.

DELETE FROM `wp_comments` WHERE `comment_ID` = 1 LIMIT 1

Для этого просто выберите свою базу данных в PHPMyAdminи перейдите на вкладку SQL и вставьте приведенный выше код в текстовую область.

1 голос
/ 25 августа 2013

Проблема связана с вашим файлом - вы пытаетесь создать базу данных, используя копию - в верхней части файла вы найдете что-то вроде этого:

СОЗДАТЬ БАЗУ ДАННЫХ, ЕСЛИ НЕ СУЩЕСТВУЕТ *THE_NAME_OF_YOUR_DB* УСТАНОВКА ПО УМОЛЧАНИЮ ПО УМОЛЧАНИЮ latin1 COLLATE latin1_general_ci;ИСПОЛЬЗУЙТЕ *THE_NAME_OF_YOUR_DB*;

, и я уверен, что у вас уже есть БД с этим именем - В ТО ЖЕ СЕРВЕР - пожалуйста, проверьте, потому что вы пытаетесь перезаписать !!Просто измените имя или (лучше) стереть эту строку!

1 голос
/ 23 июня 2012

Была такая же проблема и номер ошибки.Удалил базу, воссоздал без таблиц и импортировал измененный файл экспорта, который работал для меня.

0 голосов
/ 02 мая 2011

Изменить на код

INSERT .... (what you already have) 
ON DUPLICATE KEY UPDATE;

Это решит вашу проблему с минимумом суеты, в то же время добавляя новые строки.

0 голосов
/ 02 мая 2011

Если все, что вы хотите сделать, это заменить свой URL, я считаю, что это все, что вы должны сделать:

Update `wp_comments` Set 
`comment_author_url` = 'http://wordpress.org/'
Where `comment_author` = 'Mr WordPress'

Просто введите приведенный выше SQL-код в окно SQL в PHPMyAdmin и выполните команду.

ПРИМЕЧАНИЕ. Сначала убедитесь, что у вас есть резервная копия. И нет необходимости делать все эти вещи экспорта и импорта:)

0 голосов
/ 02 мая 2011

Поскольку у вас уже есть эта запись, вы можете просто обновить ее, а не вставлять.Было бы что-то вроде этого.

  UPDATE `wp_comments` 
  SET 'comment_author_url' = 'YOUR NEW ADDRESS'
  WHERE  `comment_ID` = 1

Просто обновите каждый экземпляр вашего старого адреса, используя этот метод.Вы можете выполнить поиск по всем сообщениям, сказав "ГДЕ" comment_author_url '= "ВАШ СТАРЫЙ АДРЕС" "

...