在重复密钥更新时插入 ... (...) (Select...)

Nic*_*ick 2 mysql insert duplication select

你能帮我解决一个问题吗。任务是在 MySQL 数据库中插入一条记录。条款:

  • 如果记录存在 - 更新记录。
  • 如果记录不存在 - 创建一个新的。

表 'NETFLOW'.'Month' 中的关键列是:

  • '年'
  • '月'
  • '日'
  • '小时'
  • '源地址'
  • 'dstaddr'。

事情是尽快查询,如果可能的话,在一个查询中。

当前查询的文本是:

    INSERT INTO `netflow`.`Month` (`Year`, `Month`, `Day`, `Hour`, `srcaddr`,`dstaddr`, `doctets`)
    (
      SELECT 
        YEAR( FROM_UNIXTIME(  `unix_secs` ) ) AS `YEAR`, 
        MONTH( FROM_UNIXTIME(  `unix_secs` ) ) AS `MONTH`, 
        DAYOFMONTH( FROM_UNIXTIME(  `unix_secs` ) ) AS `DAY`, 
        HOUR( FROM_UNIXTIME(  `unix_secs` ) ) AS `HOUR`,  
        `srcaddr` ,  
        `dstaddr` ,  
        `doctets` 
      FROM  `netflow`.`raw` 
        WHERE `unix_secs` <= 1394179200
      GROUP BY 
        `YEAR`, 
        `MONTH`, 
        `DAY`, 
        `HOUR`,
        `srcaddr`,
        `dstaddr`
    )
    ON DUPLICATE KEY UPDATE

...
Run Code Online (Sandbox Code Playgroud)

ype*_*eᵀᴹ 5

如果要使用新值更改值,可以使用:

ON DUPLICATE KEY UPDATE 
    doctets = VALUES(doctets) ;
Run Code Online (Sandbox Code Playgroud)

或者如果您想将新值添加到现有值中:

ON DUPLICATE KEY UPDATE 
    doctets = doctets + VALUES(doctets) ;
Run Code Online (Sandbox Code Playgroud)