Якщо це корисно, я зробив запит, щоб уникнути написання від руки останньої частини запиту "на дублікаті", для версій> = 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';
і його результат такий:
a=values(a), b=values(b), c=values(c), d=values(d)
у таблиці, яка має стовпці a, b, c та d, так що ви можете додати до першої частини запиту:
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)
ОНОВЛЕННЯ:
Для дуже довгого списку стовпців ви можете побачити усічений результат, ви можете використовувати цей вираз перед запитом вище (дякую дядьку iroh ):
SET SESSION group_concat_max_len = 1000000;