Pregunta 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 (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 uso insert IGNORE ignorará el error, pero aún no se actualizará.


682
2017-11-17 14:08


origen


Respuestas:


Utilizar INSERT ... ON DUPLICATE KEY UPDATE

CONSULTA:

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

1280
2017-11-17 14:12



Echa un vistazo a REPLACE

http://dev.mysql.com/doc/refman/5.0/en/replace.html

REPLACE into table (id, name, age) values(1, "A", 19)

190
2017-11-17 14:14



Probar esto:

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

Espero que esto ayude.


21
2017-11-17 14:17



Al usar la inserción por lotes, use 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),
    ...

20
2018-01-27 12:45



Prueba esto:

INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21' 

Nota:
Aquí si id es la clave principal luego de la primera inserción con id='1' cada vez intento de insertar id='1' actualizará el nombre y la edad y la edad del nombre anterior cambiará.


16
2017-08-27 07:42



INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19);

INTO TABLE (id, name, age) VALUES(1, "A", 19) ON DUPLICATE UPDATE SET NAME = "A", AGE = 19;

REPLACE INTO table (id, name, age) VALUES(1, "A", 19);

Todas estas soluciones funcionarán con respecto a su pregunta.

Si desea saber en detalle sobre esta declaración visita este enlace 


8
2017-12-07 21:06



Cuando se usa SQLite:

REPLACE into table (id, name, age) values(1, "A", 19)

Siempre que id es la clave principal. O sino solo inserta otra fila. Ver INSERTAR (SQLite).


7
2017-11-17 07:11



Solo porque estaba aquí buscando esta solución, pero para actualizar desde otra tabla de estructura idéntica (en mi caso, DB de prueba de sitio web a DB vivo):

INSERT  live-db.table1
SELECT  *
FROM    test-db.table1 t
ON DUPLICATE KEY UPDATE
        ColToUpdate1 = t.ColToUpdate1,
        ColToUpdate2 = t.ColToUpdate2,
        ...

Como se mencionó en otra parte, solo se deben incluir las columnas que desea actualizar después de ON DUPLICATE KEY UPDATE.

No es necesario listar las columnas en el INSERT o SELECT, aunque estoy de acuerdo, es probablemente una mejor práctica.


4
2018-06-09 05:31