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

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

    ERROR1136(21S01):列数が行の値数と一致しません」のようなエラーが発生した場合 」MariaDBで、データをテーブルに挿入しようとしたときに、列の列数に間違った数の式を指定したことが原因である可能性があります。

    つまり、挿入しようとしている列が多すぎるか、列が足りません。

    修正するには、INSERTを調整します 正しい数の値をテーブルに挿入するステートメント。

    INSERTの列に名前を付けることもできます MariaDBが、各式を挿入する必要のある列を認識できるようにするためのステートメント。

    エラーの例

    次の表があるとします。

    +-------+---------+---------+
    | PetId | PetName | PetType |
    +-------+---------+---------+
    |     1 | Fluffy  | Cat     |
    |     2 | Tweet   | Bird    |
    +-------+---------+---------+

    次のコードはエラーの原因になります:

    INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog', 'Brown' );

    結果:

    ERROR 1136 (21S01): Column count doesn't match value count at row 1

    この場合、3列しかないテーブルに4列のデータを挿入しようとしました。

    挿入する列が少なすぎる場合も同じエラーが発生します:

    INSERT INTO Pets VALUES ( 3, 'Wag' );

    結果:

    ERROR 1136 (21S01): Column count doesn't match value count at row 1
    ソリューション1

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

    INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog' );

    結果:

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

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

    例:

    INSERT INTO Pets ( PetId, PetName ) VALUES ( 3, 'Wag' );

    結果:

    Query OK, 1 row affected (0.005 sec)

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


    1. MySQL複数のテーブルに挿入しますか? (データベースの正規化?)

    2. OracleのGREATEST()関数

    3. Django ConnectionAbortedError:[WinError10053]確立された接続がホストマシンのソフトウェアによって中止されました

    4. SQLServerのパフォーマンスを損なうActivityMonitorを回避する方法