我正在编写一个函数来同时执行多个更新。
我受到了here的示例代码的启发:
INSERT INTO table (id,Col1,Col2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12)
ON DUPLICATE KEY UPDATE Col1=VALUES(Col1),Col2=VALUES(Col2);
但我的功能输出是这样的:
INSERT INTO table (id,Col1,Col2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12)
ON DUPLICATE KEY UPDATE id=VALUES(id), Col1=VALUES(Col1), Col2=VALUES(Col2);
所以我担心我的输出包含更新之间的主键字段。
我尝试了代码并且似乎运行良好(包括主键) 这会产生我还没有遇到的错误吗? 我是否必须从查询的第二部分删除主键?
答案 0 :(得分:1)
如果id = VALUES(id)
是主键并且是表中唯一的唯一键,则不必担心id
。在这种情况下,id
用于匹配,因此值不会发生变化。
如果桌面上有多个唯一键,那么这可能是一个问题。如果您的数据是:
id col1 col2
2 1 1
您在(col1, col2)
上有一个唯一键,然后当您插入(1, 1, 1)
时,值将更改为:
id col1 col2
1 1 1