MySQLのエラー『Column Count Doesn’t Match Value Count at Row』の解決方法

MySQLのエラー『Column Count Doesn’t Match Value Count at Row』の解決方法

MySQLでINSERT文を実行すると、『Column Count Doesn’t Match Value Count at Row』というエラーが発生することがある。このエラーは、指定したカラム数と挿入しようとしている値の数が一致していない場合に発生する。発生条件と解決方法を詳しく見ていく。

1. エラーの発生条件

このエラーは以下のような場合に発生する。

  • INSERT文で指定したカラムの数とVALUESの値の数が一致していない
  • テーブルのカラム数とVALUESの値の数が一致していない(カラム名を明示していない場合)
  • デフォルト値がないカラムを省略してINSERTしている

2. エラーの発生例

以下のSQLは、usersテーブルにデータを挿入しようとしているが、カラムの数と値の数が一致していないためエラーになる。

INSERT INTO users (id, name, email) VALUES (1, 'Taro');

3. 正しいカラム数を指定する

VALUES の値の数を、指定したカラム数と一致させる。

INSERT INTO users (id, name, email) VALUES (1, 'Taro', 'taro@example.com');

4. カラムを省略せずに指定する

カラム名を省略すると、テーブルのすべてのカラムに対応する値を指定する必要がある。

INSERT INTO users VALUES (1, 'Taro', 'taro@example.com');

5. DEFAULT値を活用する

デフォルト値が設定されているカラムは、値を省略できる。

INSERT INTO users (id, name) VALUES (1, 'Taro');

6. AUTO_INCREMENTカラムの値を省略する

PRIMARY KEYがAUTO_INCREMENTの場合、明示的に値を指定しなくてもよい。

INSERT INTO users (name, email) VALUES ('Taro', 'taro@example.com');

7. NULLを利用する

NULLを許容するカラムには、NULLを指定できる。

INSERT INTO users (id, name, email) VALUES (1, 'Taro', NULL);

8. INSERT … SELECT 構文のカラム数を一致させる

INSERT … SELECT を使う場合も、カラム数とSELECTの戻り値の数を一致させる。

INSERT INTO users (id, name, email)
SELECT id, name, email FROM temp_users;

9. CSVインポート時のエラーを防ぐ

CSVファイルをロードする際も、カラムの数とデータの数を一致させる。

LOAD DATA INFILE 'users.csv' INTO TABLE users
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, name, email);

10. テーブルの構造を確認する

どのカラムが必要なのかを事前に確認し、必要なカラムを適切に指定する。

DESC users;