2011-05-02 82 views
3

我想用全新網站url全局替換Wordpress MySQL數據庫中我的站點URL的所有實例。爲此,我使用phpMyAdmin將數據庫導出爲.sql文件,然後在文本編輯器中進行全局替換,然後使用phpMyAdmin導入.sql文件。phpMyAdmin導出/導入重複主鍵錯誤

導入期間,我遇到了主鍵錯誤的重複條目。試圖調試這個,我導出文件,然後導入相同的文件,沒有任何更改,我仍然得到相同的錯誤。

我明白任何幫助解決這個問題。

-- 
-- 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' 
+0

@Johan - 感謝編輯使我的問題中的代碼更清晰。 – LandedGently 2011-05-02 18:16:59

回答

6

原始數據仍在數據庫中。

如果您正在手動工作,則會發送一個UPDATE而不是INSERT查詢新值,但由於您正在執行批量導入,因此在導入前擦除現有表格可能會更好。

DELETE FROM `tblName`; 

請務必首先備份您的數據。

+0

謝謝。實際上,在我的情況下,我認爲我可以在執行之前刪除整個數據庫導入。 – LandedGently 2011-05-02 18:14:35

2

如果您要導出數據,則表示主要內容保留在數據庫中。所以,當你嘗試插入一個具有相同PRIMARY KEY的新行時,總是會出現一個錯誤。

解決方案:您必須刪除具有相同comment_ID的表中的行。 您必須打開PHPMyAdmin並轉到您的表格頁面,然後檢查包含所需ID的行。在這種情況下是1,這意味着它在您的表列表的第一個結果頁面中可能是可能的。只需點擊該行中出現的紅色X.

這也可以通過SQL來完成,這可能也很簡單。

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

對於這一點,只是在phpMyAdmin選擇你的數據庫,並轉到SQL選項卡,然後在文本區域中插入上面的代碼。

+0

主鍵始終是唯一的。 – 2011-05-02 17:14:18

+0

是的,沒錯,我不太確定。謝謝。 :) – 2011-05-02 17:21:38

+0

你不必**刪除該行,只需要「插入...重複密鑰更新」(請參閱​​下面的答案)。 – Johan 2011-05-02 17:24:01

0

由於您已經有該記錄,因此您可以更新記錄而不是插入。它會像這樣。

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

只需使用此方法更新舊地址的每個實例。您可以通過說「WHERE'comment_author_url'='您的舊地址'來搜索所有帖子」

0

如果你想要做的就是更換您的網址,我相信這是所有你必須做的:

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

只需輸入上面的SQL進入的phpMyAdmin的SQL盒和執行。

注:首先確保您有備份。而且也沒有必要做這一切的出口和進口的東西:)

+0

這個URL遍佈整個數據庫的許多不同的表。這是一個WordPress的事情。當我在文本編輯器中替換了全局文本時,它取代了215次。 – LandedGently 2011-05-02 18:16:02

0

切換到代碼

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

這將解決您的問題以最簡單的,同時仍插入新行。

+0

我的答案針對使用批量導出/導入工具,就像phpmyadmin中的工具一樣,即使在嚴格的語義上講,OP_wants_是一個全新的開始,而不是潛在的舊數據,我甚至建議直接刪除和重新創建表格, – 2011-05-02 17:25:42

+0

@Tomalak,這可能不可能取決於外鍵約束。 – Johan 2011-05-02 17:29:25

+0

[Wordpress表是MyISAM](http://wordpress.org/support/topic/whuy-myisam)(除非明確轉換)。 MyISAM不支持外鍵。 – 2011-05-02 17:31:56

1

有同樣的問題和錯誤號碼。刪除數據庫,重新創建沒有表,並導入更改後的導出文件爲我工作。

1

問題與文件有關的 - 您嘗試使用副本創建一個數據庫 - 在你的文件的頂部,你會發現這樣的事情:

CREATE DATABASE IF NOT EXISTS *THE_NAME_OF_YOUR_DB*默認字符集latin1 COLLATE latin1_general_ci; USE *THE_NAME_OF_YOUR_DB*;

我確定你已經擁有一個帶這個名字的數據庫 - 在同一臺服務器上 - 請檢查,因爲你正試圖覆蓋!只需更改名稱或(更好)刪除此行!

1

爲避免重複,您必須使用UPDATE而不是INSERT語句。要在phpMyAdmin中實現此目的,請按照下列步驟操作:

  1. 在樹中選擇您的數據庫。
  2. 可選。轉到「搜索」選項卡並搜索要在所有表格中替換的字符串。如果僅在多個表中找到字符串,請記下它們的名稱。這將有助於通過僅更新需要更新的表來加速進程。如果你有很多數據,這是我的重要。
  3. 轉到「導出」選項卡。
  4. 在「導出方法:」中選擇「自定義」。
  5. 可選。如果您在上面的步驟2中記錄了需要更新的表格,則在「表格:」部分中,單擊「取消選擇全部」,然後僅選擇需要更新的表格。
  6. 向下滾動到「數據創建選項」部分,並在標註爲「轉儲數據時使用的功能:」的下拉框 中選擇「更新」 (默認爲「INSERT」)。
  7. 點擊「開始」。
  8. 打開下載的SQL轉儲文件。
  9. 重要!在進行任何更改之前,用新名稱保存該文件以用於備份目的。
  10. 使用搜索&替換您的編輯器的功能來改變你想要的。然後保存該文件。
  11. 在phpMyAdmin中轉到「導入」選項卡。
  12. 在「要導入的文件:」部分點擊「選擇文件」按鈕,然後點擊編輯文件。點擊開始

您準備好了!要檢查一切是否正常,請第二次搜索數據庫(重複步驟2)。你不應該找到任何包含舊字符串的表。

+0

隨着一些大型的Wordpress文件,我得到的主鍵重複錯誤,你的答案伎倆! – 2016-01-08 14:51:22