我需要创建一个insert和update语句,当今日期不在数据库中时它会插入,否则它将更新QTY(来自excel [我已经完成的部分])从今天开始。
但是,需要插入和更新很多行。
1)它将检查数据库中的最后4天,如果今天没有包含,它将只插入今天的数据并更新最近3天的数据。另一方面,如果今天有它只会更新。
P.S:我曾尝试使用INSERT... ON DUPLICATE KEY UPDATE
,但只影响了一行。
如果是else语句,当我使用它时,它只插入一行数据,然后其余的只是更新。
可以给我一些建议或示例。
答案 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);