1

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

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

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

PS:我曾尝试使用INSERT... ON DUPLICATE KEY UPDATE,但只有 1 行受到影响。

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

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

4

3 回答 3

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;
于 2011-07-06T08:44:10.577 回答
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);
于 2011-11-18T09:26:07.413 回答
0

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

于 2011-07-06T03:25:55.977 回答