2010-01-31 23 views
10

Estoy construyendo un sistema de clasificación, y quiero insertar una nueva fila, si el campo name no lo hace ya contienen la name quiero insertar y, si existe, quiero aumentar el campo count por 1MySQL Insertar de clave duplicada

por ejemplo, si tengo una fila de la del name 'Tom' y trato de insertar otra fila con el name 'Tom, entonces yo quiero +1 para el campo count en la fila que ya existe.

Si no existe una fila con el name 'Tom', quiero insertar una nueva y establecer count a 1.

Sé que podría hacer esto con unos 3 sentencias SQL y algunos if declaraciones, pero eso ralentizaría la secuencia de comandos ya que se están ejecutando comandos 2/3 sql.

¿Alguna idea? Gracias!

Respuesta

12

ver INSERT ... ON DUPLICATE KEY UPDATE

Si especifica DUPLICADO EN KEY UPDATE, y se inserta una fila que causaría un valor duplicado en un índice UNIQUE o PRIMARY KEY, se realiza una actualización de la fila de edad.

p. Ej.

INSERT INTO table (name,counter) VALUES ('Bob', 1) 
    ON DUPLICATE KEY UPDATE counter=counter+1 
+0

hmm, no funciona, pero no hay errores. ¿Puedo especificar el campo en el que debería estar "EN DUPLICADO"? – tarnfeld

+0

ordenado, lo agregué a las CLAVES PRIMARIAS de la tabla: D – tarnfeld

+0

No tiene que ser la llave principal. Una clave única es suficiente (aunque PRIMARY siempre es único) – VolkerK

Cuestiones relacionadas