Nếu nó rất hữu ích, tôi đã thực hiện một truy vấn để tránh phải viết bằng tay phần cuối cùng của "trên trùng lặp" truy vấn, cho các phiên bản> = 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';
và đầu ra của nó là thế này:
a=values(a), b=values(b), c=values(c), d=values(d)
trên một bảng có các cột a, b, c và d, vì vậy bạn có thể thêm vào phần đầu tiên của truy vấn:
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)
UPDATE: Đối với một danh sách rất dài các cột bạn có thể thấy sản lượng cắt ngắn, bạn có thể sử dụng báo cáo này trước khi truy vấn trên (nhờ Uncle iroh):
SET SESSION group_concat_max_len = 1000000;
Nguồn
2016-01-19 18:22:28
http://stackoverflow.com/questions/294661/what-is-the-best-way-to-insert-in-and-update-a-đơn-row-table-in-mysql –