2012-02-16 20 views
0

我在MySQL數據庫中有這個表:MySql的抱怨「重複條目」雖然正在輸入的唯一數據

mysql> show columns from wifi_network_config_auth_algorithm; 
+------------------------+-------------+------+-----+---------+-------+ 
| Field     | Type  | Null | Key | Default | Extra | 
+------------------------+-------------+------+-----+---------+-------+ 
| wifi_network_config_id | int(11)  | NO | PRI | NULL |  | 
| auth_algorithm   | varchar(50) | NO | PRI | NULL |  | 
+------------------------+-------------+------+-----+---------+-------+ 

表是用liquibase創建。表創建本身不定義主鍵。下表的創建,下面liquibase命令用於2列的組合設置主鍵:

<addPrimaryKey tableName="wifi_network_config_auth_algorithm" 
     columnNames="wifi_network_config_id,auth_algorithm" 
     constraintName="pk_wifi_network_config_auth_algorithm"/> 

現在,當你執行這個數據加載到這個表:

LOCK TABLES `wifi_network_config_auth_algorithm` WRITE; 
INSERT INTO `wifi_network_config_auth_algorithm` VALUES 
(1, 'OPEN'), 
(1, 'SHARED'), 
(2, 'SHARED'), 
(2, 'LEAP'); 
UNLOCK TABLES; 

你得到:

ERROR 1062 (23000): Duplicate entry '1' for key 2 

由於兩個列的組合是主鍵,所以在兩列數據的組合應該是唯一的 - 這是該數據抄真以上。爲什麼mysql抱怨?

此外,它抱怨值'1'被分配給鍵2,這是沒有意義的。我將INSERT更改爲:

INSERT INTO `wifi_network_config_auth_algorithm` (`wifi_network_config_id`, `auth_algorithm`) 

但它沒有任何區別 - 與mysql相同的投訴。

感謝, 哈日

+3

您是否可以通過運行'SHOW CREATE TABLE wifi_network_config_auth_algorithm'來確認它是否按照預期創建了表? – kbenson 2012-02-16 00:33:03

+0

感謝這個命令 - 不知道它在那裏。它顯示了原因。創建表之後,我在wifi_network_config_id上創建了一個索引,並表示它是唯一的。 – 2012-02-16 16:36:22

+0

設置uniqe = false後,它工作正常。這裏是有問題的命令:「CREATE TABLE'wifi_network_config_auth_algorithm'( 'wifi_network_config_id' int(11)NOT NULL默認'0', 'auth_algorithm' varchar(50)NOT NULL default'', PRIMARY KEY(' wifi_network_config_id','auth_algorithm') UNIQUE KEY'index_wifi_network_config_id'('wifi_network_config_id') 約束'fk_wifi_network_config_auth_algorithm_wifi_network_config_id'外鍵('wifi_network_config_id')參考'wifi_network_config'('id')ON DELETE CASCADE ON UPDATE CASCADE」 – 2012-02-16 16:39:38

回答

1

想通了與@ kbenson的幫助下問題:

我用下面創建了一個測試表。答案在於對原始問題的評論。

1

這對我的作品。在執行插入語句之前,表是否爲空或缺少這些值?

如果我運行這個例子兩次我得到一個錯誤信息:

重複項 '1-OPEN' 關鍵 '主要'

調用DELETE FROM wifi_network_config_auth_algorithm首先避免了。

否則,主鍵的創建方式肯定有問題,因爲你的錯誤信息不同。

CREATE TABLE `test` (
      `wifi` int(11) NOT NULL, 
      `auth` varchar(50) NOT NULL, 
      PRIMARY KEY (`wifi`,`auth`) 
     ) ENGINE=InnoDB DEFAULT CHARSET=latin1   
+0

由於 – 2012-02-16 16:40:47

+0

你應該發佈什麼作爲你的問題的答案而不是評論,然後你可以選擇它作爲正確的答案,它將有助於幫助你解決問題。與未來的遊客相同或類似的問題。 – JYelton 2012-02-17 17:29:34