2012-06-12 55 views
1

我的託管公司希望我從MySQL 4服務器遷移到MySQL 5.5服務器。 我的數據庫比較大,因爲我的網站擁有近200,000多個註冊用戶的數據。導入大文件時出現MySQL奇怪問題:重複輸入密鑰'PRIMARY'

我使用PHPMyAdmin導出了所有的表格,現在我試圖將它們導入到新服務器中。一切都很好,直到我試圖導入'用戶'表。以下是其結構:

CREATE TABLE IF NOT EXISTS `user` (
`login` varchar(32) NOT NULL DEFAULT '', 
`firstname` varchar(255) NOT NULL DEFAULT '', 
`lastname` varchar(255) NOT NULL DEFAULT '', 
`email` varchar(255) NOT NULL DEFAULT '', 
... 
PRIMARY KEY (`login`), 
KEY `country_code` (`country_code`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

沒有什麼壯觀的吧?使用PHPMyAdmin導入選項卡,我上傳了SQL文件。突然,我得到以下錯誤:

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

我立即查詢數據庫並搜索用戶名登錄是'Jobi'。不匹配!

我看了一下它產生的錯誤,並試圖做手工查詢...

INSERT INTO `ft_user` 
    (`login`, `firstname`, `lastname`, `email`, ...) 
VALUES 
    ('Jobi', 'Lorem-First', 'Ipsum-Last', '[email protected]', ...); 

和它的工作就好了!

我在我的開發機器上做了測試,得到了同樣的錯誤。 有人能解釋我在這裏做錯了嗎?

預先感謝您。任何幫助真的很感激。

Hervé。

+0

嗨埃爾韋, 請檢查我f您嘗試插入的國家/地區代碼是否存在於數據庫中? –

回答

1

如果輸入文件包含具有相同主鍵值的記錄的兩個副本,則可能會出現此錯誤,但當事務回滾時,該鍵將不再存在。檢查你的輸入文件是否有重複。

+0

好的。得到它了 !另一位登錄名爲「jobì」的用戶被插入了上面兩行......我如何才能在jobì和jobi之間爲MySQL做出區別?它曾經與MySQL 4一起工作。 –

+0

在批量上傳中,我認爲你不能。您可能必須預處理數據才能更改數據,或者使索引不唯一,併爲主鍵選擇其他內容(生成的ID),然後在加載後清除它。 –

+0

謝謝吉姆。我將檢測重複項並提醒用戶他們的登錄信息已更改 –

0

在phpMyAdmin,在設置選項卡,你可以嘗試檢查以下值:

設置 - > SQL查詢 - >忽略多個語句錯誤 如果您正在使用CSV格式:

設置 - >導入 - > CSV - >如果您使用的是SQL格式不要在INSERT錯誤 中止:

設置 - >導出 - > SQL - >使用忽略插入