MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLエラー1136の修正方法:「列数が行1の値数と一致しません」

MySQLエラー1136とは?

MySQLでデータを挿入する際、ERROR 1136 (21S01): Column count doesn't match value count at row 1(列数が行1の値数と一致しません)というエラーに遭遇することがあります。これは、テーブルの列数に対してINSERT文で指定した値の数が合っていない場合に発生するエラーです。

特によくある原因のひとつが、AUTO_INCREMENT属性が設定された列(Idなど)の値を指定し忘れるケースです。実際には次のようなエラーが表示されます。

mysql> insert into DemoTable1353 values('Chris',23);
ERROR 1136 (21S01): Column count doesn't match value count at row 1

解決方法

このエラーを解決するには、以下のいずれかの方法を使用します。

  • AUTO_INCREMENT列を含むすべての列の値を明示的に指定する
  • INSERT文で列名を明示し、AUTO_INCREMENT列は自動生成に任せる(推奨)

ここからは、後者の推奨される方法を実際の例で見ていきましょう。

テーブルの作成

まず、AUTO_INCREMENT列を含むテーブルを作成します。

mysql> create table DemoTable1353
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Name varchar(20),
    -> Age int,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.52 sec)

Id列にはAUTO_INCREMENTが設定されており、値を指定しなくても自動的に連番が振られます。

レコードの挿入

次に、INSERT文で列名(Name, Age)を明示してレコードを挿入します。AUTO_INCREMENT列であるIdは指定していませんが、MySQLが自動的に値を生成してくれます。

mysql> insert into DemoTable1353(Name,Age) values('Chris',23);
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable1353(Name,Age) values('David',21);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1353(Name,Age) values('Bob',24);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1353(Name,Age) values('John',47);
Query OK, 1 row affected (0.11 sec)

挿入結果の確認

SELECT文ですべてのレコードを表示して結果を確認しましょう。

mysql> select * from DemoTable1353;

実行すると、次のようにId列に自動的に連番が割り当てられていることがわかります。

+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
|  1 | Chris |   23 |
|  2 | David |   21 |
|  3 | Bob   |   24 |
|  4 | John  |   47 |
+----+-------+------+
4 rows in set (0.00 sec)

まとめ

エラー1136は、INSERT文で指定した値の数がテーブルの列数と一致しないときに発生します。AUTO_INCREMENT列が存在する場合は、INSERT文で列名を明示的に記述し、その列を省略するのが最も安全で確実な方法です。これにより、意図しないエラーを防ぎつつ、一意なIDの管理もMySQLに任せることができます。

  1. MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方

    MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829      (      Name varchar(

  2. MySQLで列が複数の値をすべて満たす行を選択する方法|GROUP BY・HAVING句の使い方

    MySQLである列が「複数の値をすべて満たしている」行だけを抽出したい場合、IN()句と GROUP BY、そして HAVING 句を組み合わせることで実現できます。この記事では、具体的なサンプルを使いながら手順をわかりやすく解説します。1. サンプルテーブルを作成するまず、テスト用のテーブルを作成します。ここでは氏名(FirstName)と科目(Subject)を持つシンプルなテーブルを用意しました。mysql> create table DemoTable1885 ( FirstName varchar(20), Subject varchar(50)