Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Correção "ERRO 1136 (21S01):a contagem de colunas não corresponde à contagem de valores na linha 1" ao inserir dados no MySQL


Uma das mensagens de erro mais comuns no MySQL é assim:“ERROR 1136 (21S01):Column count not match value count at row 1 “.

Esse erro geralmente ocorre quando você está tentando inserir dados em uma tabela, mas o número de colunas que você está tentando inserir não corresponde ao número de colunas na tabela.

Em outras palavras, você está tentando inserir muitas colunas ou colunas insuficientes.

Para corrigir esse problema, verifique se você está inserindo o número correto de colunas na tabela.

Alternativamente, você pode nomear as colunas em seu INSERT para que o MySQL saiba em quais colunas seus dados precisam ser inseridos.

O erro também pode ocorrer se você passar o número errado de colunas para um ROW() cláusula ao usar o VALUES demonstração.

Exemplo de erro


Suponha que temos a seguinte tabela:
+----------+----------+----------+
| column_0 | column_1 | column_2 |
+----------+----------+----------+
|        1 |        2 |        3 |
|        4 |        5 |        6 |
+----------+----------+----------+

O código a seguir causará o erro:
INSERT INTO t1 VALUES (7, 8, 9, 10);

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

Nesse caso, tentei inserir dados de quatro colunas em uma tabela que possui apenas três colunas.

Receberemos o mesmo erro se tentarmos inserir poucas colunas:
INSERT INTO t1 VALUES (7, 8);

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

Solução 1


A solução óbvia é inserir o número correto de linhas. Portanto, poderíamos reescrever nosso código da seguinte forma:
INSERT INTO t1 VALUES (7, 8, 9);

Resultado:
Query OK, 1 row affected (0.00 sec)

Solução 2


Outra maneira de fazer isso é nomear explicitamente as colunas para as quais desejamos inserir dados. Essa técnica pode ser usada para inserir menos colunas do que na tabela.

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

Resultado:
Query OK, 1 row affected (0.00 sec)

Este método pode resultar em um erro diferente se houver alguma restrição que exija que um valor seja passado para essa coluna (por exemplo, se a tabela tiver um NOT NULL restrição nessa coluna). Portanto, você precisará garantir que está cumprindo todas as restrições na coluna ao fazer isso.