Si es útil, me hizo una consulta para evitar escribir a mano la última parte de la consulta "en duplicado", para las versiones> = 5.0:
SELECT GROUP_CONCAT(CONCAT(COLUMN_NAME,"=values(", COLUMN_NAME,")") SEPARATOR ", ") FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'database_name' AND TABLE_NAME = 'table_name';
y su salida es la siguiente:
a=values(a), b=values(b), c=values(c), d=values(d)
en una tabla que tiene columnas a, B, C y D, por lo que puede anexar a la primera parte de la consulta:
INSERT INTO `tableName` (`a`,`b`,`c`, `d`) VALUES (1,2,3,4) ON DUPLICATE KEY UPDATE a=values(a), b=values(b), c=values(c), d=values(d)
ACTUALIZACIÓN: Para una lista muy larga de columnas es posible que vea una salida truncada, puede utilizar esta declaración antes de la consulta anterior (gracias Uncle iroh):
SET SESSION group_concat_max_len = 1000000;
http://stackoverflow.com/questions/294661/what-is-the-best-way-to-insert-into-and-update-one-row-table-in-mysql –