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

MySQLのERROR 1136「列数が値の数と一致しません」エラーの原因と解決方法

MySQLのERROR 1136とは

「Column count doesn't match value count at row 1」というエラーは、テーブルにレコードを挿入する際に、指定した値の数がテーブルの列数と一致していない場合に発生します。特に、AUTO_INCREMENTが設定された列を含むテーブルでは、値の指定方法を誤るとこのエラーに出くわしやすいため注意が必要です。

エラーを再現するデモテーブルを作成する

まずは動作を確認するためのサンプルテーブルを作成しましょう。

mysql> create table errorDemo
-> (
-> User_Id int NOT NULL AUTO_INCREMENT,
-> User_Name varchar(20),
-> PRIMARY KEY(User_Id)
-> );
Query OK, 0 rows affected (0.47 sec)

このテーブルには「User_Id」と「User_Name」の2つの列が存在します。

エラーの発生例

列名を指定せずに値を1つだけ挿入しようとすると、次のようなエラーが発生します。

mysql> insert into errorDemo values('John');
ERROR 1136 (21S01): Column count doesn't match value count at row 1

テーブルには2つの列があるにもかかわらず、INSERT文で渡している値は1つだけです。そのため、MySQLは「列数と値の数が一致しない」と判断し、エラーを返します。

解決方法:INSERT文で列名を明示的に指定する

このエラーを回避するには、次の構文のように、挿入対象の列名を明示的に指定します。

insert into yourTableName(yourColumnName1,yourColumnName2,...N)values(yourValue1,yourValue2,....N);

AUTO_INCREMENTが設定された列は値を指定しなくても自動的に採番されるため、「User_Name」だけを指定すれば問題ありません。

正しいINSERT文の実行例

それでは、INSERTコマンドを使って実際にレコードを挿入してみましょう。

mysql> insert into errorDemo(User_Name) values('John');
Query OK, 1 row affected (0.12 sec)
mysql> insert into errorDemo(User_Name) values('Carol');
Query OK, 1 row affected (0.14 sec)
mysql> insert into errorDemo(User_Name) values('Sam');
Query OK, 1 row affected (0.15 sec)

挿入結果の確認

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

mysql> select *from errorDemo;

実行結果は以下の通りです。「User_Id」には自動的に連番が振られていることがわかります。

+---------+-----------+
| User_Id | User_Name |
+---------+-----------+
| 1 | John |
| 2 | Carol |
| 3 | Sam |
+---------+-----------+
3 rows in set (0.00 sec)

まとめ

ERROR 1136は、INSERT文で渡す値の数とテーブルの列数が一致しない場合に発生するエラーです。対処法としては、次の2つが挙げられます。

  • INSERT文で列名を明示的に指定し、必要な列にだけ値を挿入する
  • すべての列に値を挿入したい場合は、列数と同じ数の値を渡す

特にAUTO_INCREMENT列やデフォルト値が設定された列が存在する場合は、列名を指定する書き方を習慣づけておくことで、この種のエラーを未然に防ぎやすくなります。

  1. MySQLで列の値から先頭の1文字を取り出し、別の列に挿入する方法

    はじめにMySQLである列(カラム)の値から先頭の1文字を取り出し、それを別の列に格納したい場合があります。このようなときに便利なのが LEFT() 関数です。LEFT() 関数は、文字列の左端から指定した文字数だけを抽出することができます。ここでは、実際にテーブルを作成しながら、その手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstLetter」(先頭文字を格納する列)と「Title」(元となる文字列の列)の2つの列を持つテーブルを定義します。mysql> create table DemoTable2036 

  2. MySQLで列の最大値を取得する方法をわかりやすく解説

    MySQLで特定の列の最大値を取得するには、MAX(columnName)関数を使用します。本記事では、その基本的な使い方に加えて、データベースやテーブルの設計に関する前提知識もあわせて解説します。MySQLのデータベースとテーブルの基礎MySQLをインストールする前に、まず使用するバージョンと配布形式(バイナリファイルか、ソースファイルからビルドするか)を決定することが重要です。新しく作成したばかりのデータベースには、当然ながらテーブルはまだ存在しません。データベース設計において最も重要なのは、以下の要素を決めることです。データベース全体の構造必要となるテーブルの一覧各テーブルに含まれる列(