2016-04-20 7 views
-1

Ich habe eine MySQL Datenbank mit einer Tabelle wie folgt definiert:MySQL Autoinkrement Primärschlüssel verursacht Zählwertes Mismatch und Fremdschlüsselfehler

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; 

I wie diese in dieser Tabelle einzufügen versucht:

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

Dies gibt einen Fehler zurück:

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

Wenn ich entfernen Sie die chug_dedup_instance_id Primärschlüssel, dann th e einfügen funktioniert gut. Es funktioniert auch, wenn ich den ID-Wert explizit gebe:

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

Das scheint mir falsch: sollte nicht die Datenbank den Schlüsselwert liefern? Ich denke nicht, dass dies eine Kopie von PHP, MySQL error: Column count doesn't match value count at row 1 ist, weil ich frage, warum das Auto-Inkrement-Feld nicht automatisch hinzugefügt wird, wie ich glaube, dass es sein sollte.

Ich habe versucht, den Primärschlüssel zu entfernen und stattdessen einen eindeutigen Schlüssel auf die beiden wichtigsten Werte mit:

UNIQUE KEY uk_chug_dedup_instances(left_chug_name, right_chug_name)) 

Ich finde, dass, wenn ich das tue, kann ich nicht aus der Quelltabelle (chugim) löschen, die beiden Fremdschlüssel referenz die Datenbank berichtet, dass die Einschränkung gebrochen:

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) 

ich das Kind Tabellenfelder erwartet hätte aktualisiert werden, da die Tabelle „ON UPDATE CASCADE“ hat.

Ich habe die Quellentabelle ("Chugim") Definition unten kopiert. Jede Hilfe mit einer dieser Fragen wäre willkommen!

+0

"Spaltenanzahl stimmt nicht mit Wert überein" ist ziemlich einfach. Sie müssen für jede Spalte einen Wert angeben. Wenn es sich um eine Autoinkrement-Spalte handelt, können Sie 'NULL' als Wert verwenden. – miken32

+1

Mögliches Duplikat von [# 1136 - Spaltenanzahl stimmt nicht mit Wertanzahl in Zeile 1 überein] (http://stackoverflow.com/questions/16293681/1136-column-count-doesnt-match-value-count-at-row -1) –

+0

Mögliches Duplikat von [PHP, MySQL-Fehler: Spaltenanzahl stimmt nicht mit Wertanzahl in Zeile 1 überein] (http://stackoverflow.com/questions/5931900/php-mysql-error-column-count-doesnt- Match-Value-count-at-row-1) – Jocelyn

Antwort

0

Um es klar zu stellen: Ich fragte, warum eine Autoinkrementierungsspalte nicht automatisch aktualisiert wurde, wenn ich die anderen Werte einfügte. Es stellt sich heraus, dass Sie jeden nicht automatisch inkrementierten Spaltennamen auflisten müssen. Dies funktioniert:

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

prüfen 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.

Wenn Sie in INSERT-Anweisung, Sie muss Sollwerte für alle Spalten in der Tabelle verwenden, um Spalten Liste nicht explizit in der richtigen Reihenfolge. Für die Auto-Increment-Spalte gibt es keine Ausnahme.

Verwandte Themen