sql >> データベース >  >> RDS >> Mysql

MySQLにデータを挿入するときの「エラー1136(21S01):列数が行1の値数と一致しない」を修正

    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
    ソリューション1

    明らかな解決策は、正しい数の行を挿入することです。したがって、次のようにコードを書き直すことができます。

    INSERT INTO t1 VALUES (7, 8, 9);

    結果:

    Query OK, 1 row affected (0.00 sec)
    ソリューション2

    これを行う別の方法は、データを挿入する列に明示的に名前を付けることです。この手法を使用すると、テーブルよりも少ない列を挿入できます。

    例:

    INSERT INTO t1 (column_0, column_1) VALUES (7, 8);

    結果:

    Query OK, 1 row affected (0.00 sec)

    このメソッドでは、その列に値を渡す必要がある制約がある場合(たとえば、テーブルにNOT NULLがある場合)、別のエラーが発生する可能性があります。 その列の制約)。したがって、これを行うときは、列の制約に準拠していることを確認する必要があります。


    1. CRMデータベースに含める4種類の情報

    2. 類似の文字列を含むSQLレコードを検索する

    3. Rails + OSX上のMySQL:ライブラリがロードされていません:libmysqlclient.18.dylib

    4. クエリ実行時間のpsycopg2ログを取得するにはどうすればよいですか?