如果数据存在,如何更新?否则插入新数据(多行)


How to Update if the data exist else insert the new data (multiple rows)

我需要创建一个插入和更新语句,当今天的日期不在数据库中时,它将插入,否则它将更新从今天开始的QTY(来自excel[我已经完成的这一部分](。

但是,还有很多行需要插入和更新。

1( 它将检查数据库中最近4天的数据,如果没有包括今天的数据,它将只插入今天的数据并更新最近3天的数据。另一方面,如果今天有包含,它只会更新。

p.S:我曾尝试使用INSERT... ON DUPLICATE KEY UPDATE,但只影响了一行。

If-else语句,当我使用它时,它只插入一行数据,然后其余的数据只进行更新。

可以给我一些建议或例子吗。

假设您将数据从excel批量复制到临时表tbl,而实际表是tbl1,则执行类似的操作

   begin transaction;
 if not exists(select * from tbl(updlock holdlock) where...)
begin
   insert into tbl1...
else
begin
   update tbl1...
end
commit;

您使用的是什么语言?我以前在Ruby中做过类似的事情。我会在数据库级别使列(在您的情况下为Date(唯一,然后简单地尝试插入每个记录。当我因为日期不是唯一的而引发异常时,我会继续更新QTY。

我在mysql上找到了这篇文章,它说它支持多插入。http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
  ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

该语句与以下两个语句相同:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=3;
INSERT INTO table (a,b,c) VALUES (4,5,6)
  ON DUPLICATE KEY UPDATE c=9;

所以,如果我们想直接编辑,我们可以这样做。

INSERT INTO table (uniquekey,data) VALUES (1,2),(4,5)
      ON DUPLICATE KEY UPDATE data=VALUES(data);