是否有任何方法可以批量执行INSERT OR UPDATEMySQL服务器上的查询?
INSERT IGNORE ...
将无法工作,因为如果该字段已经存在,它将简单地忽略它而不插入任何内容.
REPLACE ...
将不起作用,因为如果该字段已经存在,它将首先DELETE它然后INSERT再次,而不是更新它.
INSERT ... ON DUPLICATE KEY UPDATE
会有效,但不能批量使用.
所以我想知道是否有任何类似的命令INSERT ... ON DUPLICATE KEY UPDATE可以批量发布(同时多行).
use*_*996 71
您可以使用INSERT ... ON DUPLICATE KEY UPDATE插入/更新多行.该文档具有以下示例:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
或者我误解了你的问题?
Kib*_*bee 18
一种可能的方法是创建一个临时表,将数据插入其中,然后使用连接执行1次查询,以插入不存在的记录,然后更新到存在的字段.基础知识就是这样的.
CREATE TABLE MyTable_Temp LIKE MyTable
LOAD DATA INFILE..... INTO MyTable_Temp
UPDATE MyTable INNER JOIN 
MyTable_Temp
ON MyTable.ID=MyTable_Temp.ID
SET MyTable.Col1=MyTable_Temp.Col1, MyTable.Col2=MyTable_Temp.Col2.....
INSERT INTO MyTable(ID,Col1,Col2,...)
SELECT ID,Col1,Col2,... 
FROM MyTable_Temp
LEFT JOIN MyTable 
ON MyTable_Temp.ID = MyTable.ID
WHERE myTable.ID IS NULL
DROP TABLE MyTable_Temp
语法可能不准确,但这应该为您提供基础知识.此外,我知道它不漂亮,但它完成了工作.
更新
我交换了插入和更新的顺序,因为首先执行insert会导致在调用更新时更新所有插入的行.如果首先更新,则仅更新现有记录.这应该意味着服务器的工作少一点,尽管结果应该是相同的.