¿Hay una manera fácil de INSERT
una fila cuando no existe, o UPDATE
si existe, usando una consulta MySQL?
sql
mysql
insert-update
upsert
lloriquear
fuente
fuente
MERGE
. En general, el concepto a menudo se conoce como"UPSERT"
.geb
ytopic
funcionará (ALTER TABLE table ADD UNIQUE geb_by_topic (geb, topic)
).MERGE
pero no estoy seguro de si su sintaxis es idéntica a la de SQL Server.NULL
, para permitir que elauto_increment
comportamiento 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 UPDATE
sintaxis.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 INTO
no es comoUPDATE
. Como dice el manual,REPLACE
elimina 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 INTO
es 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