0

我想要实现的类似于这个例子

键插入时单数

然而,我的不同之处在于我试图同时进行多个插入。我更新了很多行。

如果插入重复,我希望插入增加会话数

以下(精简版)导致语法错误,但它应该解释我试图实现的目标

INSERT INTO
`pc_tech`.session_route_data (session_volume,country_origin, pu_date)

VALUES

('1','Switzerland','2012-01-01')
ON DUPLICATE KEY UPDATE  `session_volume` = `session_volume`+1,

('8','Ireland','2012-01-01') 
ON DUPLICATE KEY UPDATE `session_volume` = `session_volume`+8,  

('3','UK','2012-01-01')
ON DUPLICATE KEY UPDATE `session_volume` = `session_volume`+3

修改了插入的值以匹配重复值,如下面的注释

4

1 回答 1

1

您需要为每个 upsert 做一个声明。对于 RDBMS 来说,像安排连续插入那样安排连续的更新插入是没有意义的。在连续插入的示例中,RDBMS 可以通过执行一次批量插入来提高性能(分配一次空间,一次写入磁盘,而不是每条语句一次)。在 upsert 的示例中,这些收益并不能保证,事实上如果所有语句最终都是更新而不是插入,那么您将浪费时间,而不是获得它(您浪费时间分配不需要的空间,并且您无法像插入一样提前知道要拉出哪些块。)因此,大多数 RDBMS 不为此类操作提供单语句语法。

不幸的是,您的语法可能需要看起来像这样。

INSERT INTO
`pc_tech`.session_route_data (session_volume,country_origin, pu_date)
VALUES ('1','Switzerland','2012-01-01')
ON DUPLICATE KEY UPDATE  `session_volume` = `session_volume`+1;

INSERT INTO
`pc_tech`.session_route_data (session_volume,country_origin, pu_date)
('8','Ireland','2012-01-01') 
ON DUPLICATE KEY UPDATE `session_volume` = `session_volume`+8; 

INSERT INTO
`pc_tech`.session_route_data (session_volume,country_origin, pu_date)
('3','UK','2012-01-01')
ON DUPLICATE KEY UPDATE `session_volume` = `session_volume`+3;

如果您担心并发性(如果您希望调度程序从时间和日志记录的角度将多个语句视为单个语句,则需要使用事务。)

于 2013-03-21T16:13:47.953 回答