¿Hay una manera fácil de INSERTuna fila cuando no existe, o UPDATEsi existe, usando una consulta MySQL?
sql
mysql
insert-update
upsert
lloriquear
fuente
fuente

MERGE. En general, el concepto a menudo se conoce como"UPSERT".gebytopicfuncionará (ALTER TABLE table ADD UNIQUE geb_by_topic (geb, topic)).MERGEpero no estoy seguro de si su sintaxis es idéntica a la de SQL Server.NULL, para permitir que elauto_incrementcomportamiento funcione (que de lo contrario, sí, funciona como presume; consulte dev.mysql.com/doc/refman/5.5/en/example-auto-increment. html )VALUES(col)para obtener el valor del argumento de inserción en caso de duplicado. Por ejemplo:ON DUPLICATE UPDATE b = VALUES(b), c = VALUES(c)Sé que esta es una vieja pregunta, pero Google me llevó aquí recientemente, así que imagino que otros también vendrán.
@chaos es correcto: existe la
INSERT ... ON DUPLICATE KEY UPDATEsintaxis.Sin embargo, la pregunta original fue sobre MySQL específicamente, y en MySQL existe la
REPLACE INTO ...sintaxis. En mi humilde opinión, este comando es más fácil y más sencillo de usar para upserts. Del manual:Tenga en cuenta que esto no es SQL estándar. Un ejemplo del manual:
Editar: solo una advertencia justa que
REPLACE INTOno es comoUPDATE. Como dice el manual,REPLACEelimina la fila si existe, luego inserta una nueva. (Observe las divertidas "2 filas afectadas" en el ejemplo anterior). Es decir, reemplazará los valores de todas las columnas de un registro existente (y no simplemente actualizará algunas columnas). El comportamiento de MySQLREPLACE INTOes muy similar al de SqliteINSERT OR REPLACE INTO. Consulte esta pregunta para conocer algunas soluciones alternativas si solo desea actualizar algunas columnas (y no todas) si el registro ya existe.fuente