2016-04-20 109 views
-1

我有這樣定義的表的MySQL數據庫:MySQL的自動增量主鍵造成價值數錯配和外鍵錯誤

CREATE TABLE IF NOT EXISTS chug_dedup_instances(
left_chug_name varchar(50) NOT NULL, 
FOREIGN KEY fk_left_chug_name(left_chug_name) REFERENCES chugim(name) 
ON DELETE CASCADE 
ON UPDATE CASCADE, 
right_chug_name varchar(50) NOT NULL, 
FOREIGN KEY fk_right_chug_name(right_chug_name) REFERENCES chugim(name) 
ON DELETE CASCADE 
ON UPDATE CASCADE, 
chug_dedup_instance_id int NOT NULL AUTO_INCREMENT PRIMARY KEY) 
COLLATE utf8_unicode_ci 
ENGINE = INNODB; 

我試圖插入到這個表像這樣

INSERT INTO chug_dedup_instances VALUES ("Swimming", "Swimming"); 

這將返回一個錯誤:

ERROR 1136 (21S01): Column count doesn't match value count at row 1 

如果刪除了chug_dedup_instance_id主鍵,那麼第e插入工作正常。如果我明確給出ID值,它也可以工作:

mysql> INSERT INTO chug_dedup_instances VALUES ("Swimming", "Swimming", 0); 
Query OK, 1 row affected (0.00 sec) 

這對我來說似乎是錯誤的:應該不是數據庫提供的關鍵值?我不認爲這是PHP, MySQL error: Column count doesn't match value count at row 1的重複,因爲我問爲什麼自動增量字段不會自動添加,因爲我相信它應該是。

我試着刪除主鍵,而是採用在兩個主要價值的唯一密鑰:

UNIQUE KEY uk_chug_dedup_instances(left_chug_name, right_chug_name)) 

我發現,當我這樣做,我不能從源表(chugim)刪除兩個外鍵參比數據庫報告,約束被打破:

Cannot add or update a child row: a foreign key constraint fails (`camprama_chugbot_db`.`chug_dedup_instances`, CONSTRAINT `chug_dedup_instances_ibfk_2` FOREIGN KEY (`right_chug_name`) REFERENCES `chugim` (`name`) ON DELETE CASCADE ON UPDATE CASCADE) 

我本來期望的子表的字段進行更新,因爲表中有「ON UPDATE CASCADE」。

我已經複製下面的源表(「chugim」)定義。任何幫助這些問題將不勝感激!

CREATE TABLE IF NOT EXISTS chugim(
name varchar(50) NOT NULL, 
group_id int, 
FOREIGN KEY fk_group(group_id) REFERENCES groups(group_id) 
ON DELETE SET NULL 
ON UPDATE CASCADE, 
max_size int NULL, 
min_size int NULL DEFAULT 0, 
description varchar(2048), 
UNIQUE KEY uk_chugim(name, group_id), 
chug_id int NOT NULL AUTO_INCREMENT PRIMARY KEY) 
COLLATE utf8_unicode_ci 
ENGINE = INNODB; 
+0

「列數不匹配值計數」非常簡單。您需要爲每列提供一個值。如果它是一個自動增量列,那麼可以使用'NULL'作爲值。 – miken32

+1

[#1136 - 列計數與第1行的值計數不匹配]的可能重複(http://stackoverflow.com/questions/16293681/1136-column-count-doesnt-match-value-count-at-row -1) –

+0

[PHP,MySQL錯誤:列計數與第1行的值計數不匹配]的可能重複(http://stackoverflow.com/questions/5931900/php-mysql-error-column-count-doesnt- match-value-count-at-row-1) – Jocelyn

回答

0

要清楚:我在問爲什麼當我插入其他值時自動增量列不會自動更新。事實證明,您需要列出每個非自動遞增的列名稱。這工作:

INSERT INTO chug_dedup_instances (left_chug_name, right_chug_name) VALUES ("Swimming", "Swimming"); 
Query OK, 1 row affected (0.02 sec) 
0

檢查MySQL manual

If you do not specify a list of column names for INSERT ... VALUES or INSERT ... SELECT, values for every column in the table must be provided by the VALUES list or the SELECT statement. If you do not know the order of the columns in the table, use DESCRIBE tbl_name to find out.

如果不使用INSERT語句的列列表中,你必須一套所有列在表中明確地以正確的順序值。自動增量列沒有例外。