我在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相同的投訴。
感謝, 哈日
您是否可以通過運行'SHOW CREATE TABLE wifi_network_config_auth_algorithm'來確認它是否按照預期創建了表? – kbenson 2012-02-16 00:33:03
感謝這個命令 - 不知道它在那裏。它顯示了原因。創建表之後,我在wifi_network_config_id上創建了一個索引,並表示它是唯一的。 – 2012-02-16 16:36:22
設置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