2012-06-10 44 views
5

MySQL está emitiendo este error cuando trato de ejecutar una consulta donde el recuento de columnas no coincide. Esta es la estructura de la tabla:MySQL "El recuento de columnas no coincide con el recuento de valores", pero el recuento CONECTA

mysql> desc S_3068; 
+-------------------+----------------------+------+-----+---------+-------+ 
| Field    | Type     | Null | Key | Default | Extra | 
+-------------------+----------------------+------+-----+---------+-------+ 
| SfmID    | smallint(5) unsigned | NO | PRI | 1  |  | 
| DatValue   | float    | NO |  | 0  |  | 
| DatRawValue  | int(10) unsigned  | NO |  | 0  |  | 
| DatTime   | int(10) unsigned  | NO | PRI | 0  |  | 
| DatBusOrder  | tinyint(3) unsigned | NO | PRI | 1  |  | 
| DatFormulaVersion | tinyint(3) unsigned | NO |  | 0  |  | 
+-------------------+----------------------+------+-----+---------+-------+ 
6 rows in set (0.00 sec) 

consigo el error antes mencionado cuando yo haga esta consulta:

mysql> insert ignore into S_3068 values (133, 15.82, 5542, 1339309260, 0, 1); 
ERROR 1136 (21S01): Column count doesn't match value count at row 1 

Como se puede ver, el número de columnas coincide con el recuento de valor. Ahora lo que es aún más sorprendente es que la consulta funciona perfectamente bien con SfmID = 132:

mysql> insert ignore into S_3068 values (132, 15.82, 5542, 1339309260, 0, 1); 
Query OK, 1 row affected (0.00 sec) 

SfmID ser un smallint sin firmar, que no tiene ningún sentido para mí.

Cualquier ayuda sobre este tema sería muy apreciada.

EDITAR: El error fue causado por un disparador asociado a la tabla. Por favor vea los comentarios para más información.

+2

'CHECK TABLE S_3068'? – eggyal

+0

No estoy seguro de qué se suponía que debía hacer, pero funcionó bien (estado correcto) y aún así la consulta falla con el mismo error. –

+0

¿Qué sucede si enumera explícitamente las columnas (no veo por qué eso marcaría la diferencia, pero podría ayudar a reducir el origen del problema)? – eggyal

Respuesta

2

El error fue causado por un disparador asociado a la tabla, haciendo un inserto lateral en otra tabla para el valor 133 pero no para el valor 132. El error emitido por MySQL era sobre la otra tabla (el recuento de columnas era incorrecto) y no sobre la mesa principal en la que estaba insertando datos.

Cuestiones relacionadas