2016-04-15 82 views
-1

標題說明了一切。錯誤1062,「EMPTY TABLE上的密鑰'Email_UNIQUE'的重複條目'[email protected]'」

具有以下創建語法的空表,只有數據庫中的表。

CREATE TABLE IF NOT EXISTS `ACME`.`Registration` (
    `ConfirmationNumber` INT NOT NULL AUTO_INCREMENT, 
    `FirstName` VARCHAR(45) NOT NULL, 
    `LastName` VARCHAR(45) NOT NULL, 
    `CompanyName` VARCHAR(100) NOT NULL, 
    `Title` VARCHAR(60) NOT NULL, 
    `Email` VARCHAR(60) NOT NULL, 
    `PhoneNumber` VARCHAR(20) NOT NULL, 
    `StreetAddress` VARCHAR(100) NOT NULL, 
    `City` VARCHAR(30) NOT NULL, 
    `Province` VARCHAR(30) NOT NULL, 
    `ZipCode` VARCHAR(10) NOT NULL, 
    `Country` VARCHAR(40) NOT NULL, 
    PRIMARY KEY (`ConfirmationNumber`), 
    UNIQUE INDEX `ConfirmationNumber_UNIQUE` (`ConfirmationNumber` ASC), 
    UNIQUE INDEX `Email_UNIQUE` (`Email` ASC), 
    UNIQUE INDEX `PhoneNumber_UNIQUE` (`PhoneNumber` ASC)) 
ENGINE = InnoDB 

任何和所有插入都會出現此錯誤。

Error 1062, "Duplicate entry '[email protected]' for key 'Email_UNIQUE'" 

我試着插入有和沒有0的自動遞增確認號碼。 (Mac)系統偏好設置窗格顯示服務器運行正常,但如果我嘗試停止/從終端啓動,我會得到奇怪的錯誤(012) 。具體做法是:

$ mysql.server stop 
ERROR! MySQL server PID file could not be found! 
$ mysql.server start 
Starting MySQL 
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/rover-231-4.rovernet.mtu.edu.pid). 

雖然,我知道,我連接到正確的服務器(本地主機)和數據庫,由於數據被打INSERTED到登記表。

這是一個Python/MySQL/Flask - > HTML/CSS/JS堆棧,所有這些我都是新手。 Python代碼插入是:

query_string = (
     "INSERT INTO Registration " 
     "(FirstName, LastName, CompanyName, Title, Email, PhoneNumber, " 
     "StreetAddress, City, Province, ZipCode, Country) " 
     "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);") 
    cursor.execute(query_string, (first_name, last_name, company, title, email, phone, address, city, state, zipcode, country)) 

編輯:我還要補充一點,直到我遇到了一個安裝問題,必須重新安裝,完全相同的代碼工作完全正常。

回答

0

鑑於顯示的代碼部分,我們將猜測在查詢執行時,電子郵件變量中包含字符串「[email protected]」。

我建議你試試表

SELECT email FROM Registration WHERE email = '[email protected]' 

的查詢只是爲了看看,如果有一個現有的行返回。

由於在表中該列上定義了UNIQUE約束,如果該行已經在表中,並且您試圖添加具有相同值的另一行,則返回的錯誤是預期結果。

是否有可能你的代碼循環插入語句兩次(或多次)?

您確定您的代碼使用相同的憑據和數據庫連接到同一臺MySQL服務器嗎?

另一個不太可能的可能性是,在表中定義了一個BEFORE INSERT觸發器,該觸發器將NEW.email設置爲該字符串值。

作爲另一種可能性,特別是如果這些是MyISAM表,表中的損壞。你可以刪除表格並重新創建它。

爲了調試這個,我建議你echo /打印查詢執行中引用的變量的值,特別是email變量。

+0

我刪除了整個數據庫和/或表以及重命名它們。相同的結果。我只有在本地主機的服務器和用戶根定義。由於整個程序中沒有循環,所以我不能循環,這是唯一的插入命令,後面跟着打印輸出。沒有定義插入觸發器,因爲上面給出的sql是整個數據庫創建腳本。電子郵件變量肯定是在變化,因爲在HTML字段中使用不同的值會產生錯誤中的不同值。如果我完全刪除電子郵件,它也會發生電話號碼。 – unwrittenrainbow

+0

那麼這就是我們在違反唯一鍵約束時得到的錯誤。我的下一個建議是*刪除唯一索引並運行代碼。然後檢查表格的內容,看它是否包含任何行。 (我懷疑你會找到兩個或更多的行)。 – spencer7593

0

我在黑暗中刺了一下,但是用IF NOT EXISTS創建表意味着如果它不存在,將創建表只有

如果表確實存在,並且它包含數據,例如,在其中列Email[email protected]的行中,您的插入將失敗。

如果表已經存在,CREATE TABLE命令不會投訴,並且它不會從現有表中清除數據,因此多次執行代碼可能會產生您看到的錯誤。

如果您能承受失去表格,那麼在您開始燒瓶應用程序之前嘗試刪除它,並查看問題是否持續存在。如果你不能丟失數據,請嘗試重命名該表並重新啓動燒瓶應用程序:

mysql> rename table `ACME`.`Registrations` to `ACME`.`blah`; 
+0

我已經(手動)刪除整個數據庫和/或表以及重命名它們。同樣的結果。 – unwrittenrainbow

+0

但是你什麼時候遇到問題?它是第一次嘗試還是後續嘗試。所有的證據都指出該表已經包含了一列含有唯一列的行,因此是錯誤的可能性。 – mhawke

+0

第一次嘗試。 ( – unwrittenrainbow

0

HTML/CSS/JS的新手。原來,我的JS和我的HTML都調用了驗證函數,但我沒有注意到,因爲這是第一次(在迄今爲止的很多開發中)調用函數兩次會導致錯誤。感謝mhawke和spencer7593指引我朝着正確的方向發展。

相關問題