我需要创建一个插入和更新语句,当今天的日期不在数据库中时,它将插入,否则它将更新从今天开始的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);