MySQL — 仅当两个唯一字段匹配时才进行重复键更新,否则插入

MySQL — ON DUPLICATE KEY UPDATE only when both unique fields match, else INSERT

我有以下查询:

"INSERT INTO `occ_apps` (`occ_date`, `service_tag`, `counter`) VALUES (?, ?, '1') ON DUPLICATE KEY UPDATE `counter` = (`counter`+1)"

当前,当 occ_dateservice_tag 连续匹配时,它会递增 counter。 其中 occ_dateservice_tagunique 字段,我无法将主键设置为两个唯一字段。

我运行以下:

ALTER TABLE occ_apps
DROP PRIMARY KEY,
ADD PRIMARY KEY (occ_date, service_tag);

然后我得到了错误:

`#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key`

我希望它仅在 occ_dateservice_tag 都匹配(已经存在)在一行中时才更新(递增)计数器,否则它应该插入一个新行。

Software version: 5.5.53-MariaDB-1~wheezy - mariadb.org binary distribution

当我 运行 DESC occ_apps 我得到:

Field           Type            Null        Key     Default     Extra

serial_no       int(255)        NO          PRI     NULL          auto_increment
occ_date        varchar(255)    NO          UNI     NULL        
counter         int(255)        NO                  NULL    
service_tag     varchar(255)    YES         UNI     NULL    

我认为您 table 中甚至不需要计数器字段。看起来您的计数器只是保存给定值出现的次数。这可以使用 GROUP BY

轻松生成
SELECT occ_date, COUNT(*) FROM occ_apps GROUP BY `occ_date`;

所以您想过滤查询,以便只获取计数至少为 5 的项目?

SELECT occ_date, COUNT(*) FROM occ_apps  WHERE service_tag = 'service-1'
GROUP BY `occ_date` HAVING COUNT(*) > 5

此类问题已使用 GROUP BY 解决了数百万次。就 SQL 查询聚合的功能而言,这只是冰山一角。请花点时间仔细阅读。