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

发布于 2024-11-18 12:57:20 字数 327 浏览 0 评论 0原文

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

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

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

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

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

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

I need to create a insert and update statement, when today date is not in the database it will insert else it will update the QTY (from excel [this part I have done]) get from today.

But, there have a lots of row need to be insert and update.

1) it will check for the last 4 days in database, if there doesn't include today, it will just insert the data for today and update the last 3 days data. in the other hand, if there contain today it will just update.

P.S: I had try to use INSERT... ON DUPLICATE KEY UPDATE but it only 1 row affected.

If else statement , when i used this it only insert one row of data then the rest it just doing update.

Can give me some advise or example.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

眼泪都笑了 2024-11-25 12:57:20

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

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

suppose you bulk copy your data from excel to a temporary table tbl and your actual table is tbl1 then do something like this

   begin transaction;
 if not exists(select * from tbl(updlock holdlock) where...)
begin
   insert into tbl1...
else
begin
   update tbl1...
end
commit;
叹倦 2024-11-25 12:57:20

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

What language are you using to do this? I have done something similar in Ruby before. I would make the column (Date in your case) unique at the database level then simply try inserting each record. When I get an exception thrown because the Date is not unique I would then proceed to update the QTY.

薄荷港 2024-11-25 12:57:20

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

I found this article on mysql which says it supports multiple insert.
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);

That statement is identical to the following two statements:

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;

So if we want to edit straight, we could do something like this.

INSERT INTO table (uniquekey,data) VALUES (1,2),(4,5)
      ON DUPLICATE KEY UPDATE data=VALUES(data);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文