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

时间:2011-07-06 02:49:08

标签: php sql upsert

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

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

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

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

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

可以给我一些建议或示例。

3 个答案:

答案 0 :(得分:1)

假设您将数据从excel批量复制到临时表tbl并且您的实际表是tbl1然后执行类似这样的操作

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

答案 1 :(得分:0)

你用什么语言来做这件事?我之前在Ruby中做过类似的事情。我会在数据库级别使列(在您的情况下为Date)唯一,然后只需尝试插入每条记录。当我因为Date不唯一而抛出异常时,我会继续更新QTY。

答案 2 :(得分:0)

我在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);