2011-04-21 8 views
7

tengo esta tabla:SQL no coincida con el valor de error recuento

CREATE TABLE `message` (
    `m_id` INT(11) NOT NULL AUTO_INCREMENT, 
    `p_id` VARCHAR(30) NOT NULL, 
    PRIMARY KEY (`m_id`) 
) 
ENGINE=InnoDB 
ROW_FORMAT=DEFAULT 

y este inserto

INSERT INTO `message` VALUES ('7'); 

y estoy recibiendo un "número de columnas no coincide con un recuento valor de la fila" error. Debería funcionar bien ya que la clave principal es auto_increment.

+0

su suposición en la frase final no es válida para MySQL, tal vez para otros DBMS. – Johan

Respuesta

12

Normalmente, cuando tiene un campo Incremento automático no desea especificar el valor para esa columna. Lo que significa que elimina ese valor del VALUES

Sin embargo, como señala Johan, siempre que el número de columnas en la tabla no coincida con el número de columnas debe especificar la lista de columnas en la tabla de destino.

Su buena práctica para hacer de todos modos, en caso de que el número de columnas o el fin de la columna cambia

INSERT INTO 
message 
(p_id) 
Values ('7') 
+0

-1 @Conrad, Usted dice que puede salirse con la suya con un inserto como: insertar en valores de mensaje ('7') no, no creo que funcione en MySQL. – Johan

+0

@Johan. He actualizado mi respuesta para ser claro. Cuando no hay campo AUTO_INCREMENT, los nombres de columna de destino se pueden omitir. –

+0

el código mostrado funcionará, pero tenga en cuenta que esto no depende de una columna de autoincremento. Si # de columnas = # de columnas insertadas, MySQL está contento, independientemente de la autoincrementación (y/n), las claves (y/n) o lo que sea. – Johan

4

Debe especificar las columnas en las que está insertando. Si no lo hace, la base de datos asume que los valores que está proporcionando son valores para cada columna y en el orden exacto de las columnas de acuerdo con el esquema. Pruebe la declaración a continuación.

INSERT INTO `message` (p_id) VALUES ('7'); 

Además, es una buena práctica especificar siempre las columnas en una declaración de inserción. Ayuda a la legibilidad.

6

debe especificar los nombres de columna cuando el número de valores no es igual al número de columnas:

INSERT INTO message (p_id) VALUES ('7'); 
0

Prueba esto:

INSERT INTO `message` (p_id) VALUES ('7'); 

Usted no está especificando las columnas, las cuales hay 2 de, una persona d tratando de insertar 1 valor.

0

tal vez si usted hace esto

INSERT INTO message (p_id) VALUES ("7"); 
0

Usted puede hacer esto

INSERT INTO `message` VALUES (NULL, '7'); 

Esto corresponderá con el número de columnas y pasar por alto el inserto nulo en el identificador de incremento automático e insertar el valor auto increment;

Cuestiones relacionadas