Insertar en una tabla MySQL o actualizar si existe
Quiero agregar una fila a una tabla de base de datos, pero si existe una fila con la misma clave única, quiero actualizar la fila.
Por ejemplo:
INSERT INTO table_name (ID, NAME, AGE) VALUES(1, "A", 19);
Digamos que la clave única es ID
y en mi base de datos hay una fila con ID = 1
. En ese caso, quiero actualizar esa fila con estos valores. Normalmente esto da un error.
Si lo uso INSERT IGNORE
, ignoraré el error, pero aún así no se actualizará.
UsarINSERT ... ON DUPLICATE KEY UPDATE
CONSULTA:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name="A", age=19
Verificar REPLACE
:
REPLACE
funciona exactamente igualINSERT
, excepto que si una fila antigua de la tabla tiene el mismo valor que una fila nueva para un índicePRIMARY KEY
o unUNIQUE
índice, la fila anterior se elimina antes de insertar la nueva fila.
Ejemplo:
REPLACE INTO `tablename` (`id`, `name`, `age`) VALUES (1, "A", 19)
Cuando utilice la inserción por lotes, utilice la siguiente sintaxis:
INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22)
ON DUPLICATE KEY UPDATE
name = VALUES (name),
...