Cómo insertar un valor o actualizarlo desde el mismo script de SQL

Hoy os voy a dejar un scrip de SQL muy útil para actualizar un valor o registro en el caso de que exista, o para insertarlo en el caso de que no

El script sería de la siguiente manera:

UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
    INSERT INTO Table1 VALUES (...)

Os voy a explicar un poco como funciona

La primera fila, lo que hace es la sentencia del de update si existiera

La segunda fila verifica si la sentencia del update ha funcionado, que quiere decir que si  existía la fila la habría actualizado

si no es el caso, no devolverá ninguna fila, por lo que verificamos si el número de filas devueltas es 0 (zero)

finalmente la última fila sería la que haría el insert del valor

Os voy a poner un ejemplo práctico

UPDATE MARCAS SET DESCMARCA='ADIDAS' WHERE CODMARCA=1
IF @@ROWCOUNT=0
 INSERT INTO MARCAS (CODMARCA, DESCMARCA) VALUES (1,'ADIDAS')

Actualizo el nombre de la marca si existiera

en mi caso, la primera vez como no existe lo que hace es insertarla

 

¿Y en MySQL, cómo lo haríamos?

La estructura cambiaría un poco

INSERT INTO table (id, name, age) VALUES(1, "A", 19) 
ON DUPLICATE KEY 
UPDATE name="A", age=19

En mySql comenzamos con el insert y en la segunda línea verificamos si la “Key” está duplicada

en cuyo caso lo que hacemos es un update

Os voy a poner un ejemplo de la sentencia en una tabla de Prestashop

insert into ps_manufacturer (id_manufacturer, name) VALUES (1,"ADIDAS") 

ON DUPLICATE KEY 

UPDATE name="ADIDAS"