2010-05-28 13 views
9

que estoy usando actualmente un reemplazo en sus palabras, hay un campo único que hará que para actualizar en lugar de INSERT si encuentra un duplicado ...MySQL sustituir en alternativa

El problema es que si encuentra un duplicado No puedo actualizar algunas columnas, simplemente borra todo.

¿Existe un método similar de "una declaración" en el que puedo ACTUALIZAR lo que quiero?

que he encontrado se funden en undertsnad pero no el primer bit acerca de la combinación en la tabla utilizando la tabla

Respuesta

16

Vas a querer utilizar el INSERT ... ON DUPLICATE KEY UPDATE sintaxis.

http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

He aquí un ejemplo que tratará de crear un registro con un id, cumpleaños, y el nombre. Si existe un registro con el campo id, hará la actualización especificada. La tabla tiene muchos otros campos, como la dirección de correo electrónico, el código postal, etc. Quiero dejar esos campos en paz si actualizo. (REPLACE INTO perdería cualquiera de esos datos si no lo incluí en la declaración REPLACE INTO.)

INSERT INTO user (userid,birthday,first_name,last_name) 
    VALUES (1234,'1980-03-07','Joe','Smith') 
ON DUPLICATE KEY UPDATE 
    birthday = '1980-03-07', 
    first_name = 'Joe', 
    last_name = 'Smith'; 
+0

¡Estupendo! De esta manera mantiene la clave principal ... – 472084

+0

Sí, la desventaja es que requiere mucha escritura. – Anonymous

+1

También existe la posibilidad de obtener un beneficio de rendimiento considerable al usar INSERT ... EN ACTUALIZACIÓN DUPLICADA DE LLAVE: http://code.openark.org/blog/mysql/replace-into-think-twice. Yo diría que vale la pena un minuto adicional de escritura de código ... –