MySQLで最も一般的なエラーメッセージの1つは、次のようになります。「エラー1136(21S01):列数が行1の値数と一致しません 「。
このエラーは通常、データをテーブルに挿入しようとしているときに発生しますが、挿入しようとしている列の数がテーブルの列の数と一致しません。
つまり、挿入しようとしている列が多すぎるか、列が足りません。
この問題を修正するには、テーブルに正しい数の列を挿入していることを確認してください。
または、INSERT
の列に名前を付けることもできます MySQLがデータを挿入する必要のある列を認識できるようにするためのステートメント。
ROW()
に間違った数の列を渡した場合にも、エラーが発生する可能性があります。 VALUES
を使用する場合の句 ステートメント。
次の表があるとします。
+----------+----------+----------+ | column_0 | column_1 | column_2 | +----------+----------+----------+ | 1 | 2 | 3 | | 4 | 5 | 6 | +----------+----------+----------+
次のコードはエラーの原因になります:
INSERT INTO t1 VALUES (7, 8, 9, 10);
結果:
ERROR 1136 (21S01): Column count doesn't match value count at row 1
この場合、3列しかないテーブルに4列のデータを挿入しようとしました。
挿入する列が少なすぎる場合も同じエラーが発生します:
INSERT INTO t1 VALUES (7, 8);
結果:
ERROR 1136 (21S01): Column count doesn't match value count at row 1
明らかな解決策は、正しい数の行を挿入することです。したがって、次のようにコードを書き直すことができます。
INSERT INTO t1 VALUES (7, 8, 9);
結果:
Query OK, 1 row affected (0.00 sec)
これを行う別の方法は、データを挿入する列に明示的に名前を付けることです。この手法を使用すると、テーブルよりも少ない列を挿入できます。
例:
INSERT INTO t1 (column_0, column_1) VALUES (7, 8);
結果:
Query OK, 1 row affected (0.00 sec)
このメソッドでは、その列に値を渡す必要がある制約がある場合(たとえば、テーブルにNOT NULL
がある場合)、別のエラーが発生する可能性があります。 その列の制約)。したがって、これを行うときは、列の制約に準拠していることを確認する必要があります。