Mysql 重复项上的重复更新
我有一个使用事件调度器更新数据库的查询。它应该每天更新一次数据。我的问题是,如果记录存在,我无法让它更新,除非我创建唯一的索引,因为域每个月都会重复,所以我无法这样做Mysql 重复项上的重复更新,mysql,Mysql,我有一个使用事件调度器更新数据库的查询。它应该每天更新一次数据。我的问题是,如果记录存在,我无法让它更新,除非我创建唯一的索引,因为域每个月都会重复,所以我无法这样做 INSERT INTO f_s.s_d_s_tab(month,count_per_month,updated) SELECT * FROM ( SELECT DATE_FORMAT(`FE`,'%m') AS Month, COUNT(FE) AS FirstCount, domain FROM rets GROUP BY D
INSERT INTO f_s.s_d_s_tab(month,count_per_month,updated)
SELECT * FROM
(
SELECT
DATE_FORMAT(`FE`,'%m') AS Month, COUNT(FE) AS FirstCount, domain
FROM rets
GROUP BY DATE_FORMAT(`FE`,'%m'), domain
ORDER BY domain, Month ASC
) a
ON DUPLICATE KEY UPDATE count_per_month = a.FirstCount, updated = NOW();
记录显示是这样的
Domain Month coun_per_month
dom1 01 50
dom1 02 90
dom1 03 34
dom2 01 12
dom2 02 99
dom2 03 80
等等
我可以做些什么使它插入新域,但更新旧域
我的问题是,如果记录存在,我无法让它更新,除非我创建唯一的索引,因为域每个月都会重复,所以我无法这样做
INSERT INTO f_s.s_d_s_tab(month,count_per_month,updated)
SELECT * FROM
(
SELECT
DATE_FORMAT(`FE`,'%m') AS Month, COUNT(FE) AS FirstCount, domain
FROM rets
GROUP BY DATE_FORMAT(`FE`,'%m'), domain
ORDER BY domain, Month ASC
) a
ON DUPLICATE KEY UPDATE count_per_month = a.FirstCount, updated = NOW();
当然可以-在域和月份上创建唯一索引
我的问题是,如果记录存在,我无法让它更新,除非我创建唯一的索引,因为域每个月都会重复,所以我无法这样做
INSERT INTO f_s.s_d_s_tab(month,count_per_month,updated)
SELECT * FROM
(
SELECT
DATE_FORMAT(`FE`,'%m') AS Month, COUNT(FE) AS FirstCount, domain
FROM rets
GROUP BY DATE_FORMAT(`FE`,'%m'), domain
ORDER BY domain, Month ASC
) a
ON DUPLICATE KEY UPDATE count_per_month = a.FirstCount, updated = NOW();
当然可以-在域和月上创建唯一索引。它看起来不像选择列表中的列与插入列表中的列“对齐”
INSERT INTO f_s.s_d_s_tab(domain, month, count_per_month, updated)
SELECT a.*
FROM (
SELECT r.domain AS domain
, DATE_FORMAT(r.`FE`,'%m') AS month
, COUNT(r.FE) AS count_per_month
, NOW() AS updated
FROM rets r
GROUP
BY DATE_FORMAT(r.`FE`,'%m')
, r.domain
ORDER BY r.domain ASC, r.month ASC
) a
ON DUPLICATE KEY
UPDATE count_per_month = VALUES(count_per_month)
, updated = VALUES(updated)
要生成“复制键”条件以获得更新操作,您需要在f_.s_d_s_选项卡(域,月)上定义一个唯一的约束(或主键)它看起来不像选择列表中的列与插入列表中的列“对齐”
INSERT INTO f_s.s_d_s_tab(domain, month, count_per_month, updated)
SELECT a.*
FROM (
SELECT r.domain AS domain
, DATE_FORMAT(r.`FE`,'%m') AS month
, COUNT(r.FE) AS count_per_month
, NOW() AS updated
FROM rets r
GROUP
BY DATE_FORMAT(r.`FE`,'%m')
, r.domain
ORDER BY r.domain ASC, r.month ASC
) a
ON DUPLICATE KEY
UPDATE count_per_month = VALUES(count_per_month)
, updated = VALUES(updated)
要生成“复制键”条件以获得更新操作,您需要在f_.s_d_s__选项卡(域,月)上定义一个唯一约束(或主键)
唯一(域,月)
?我将使用`。。。每月更新计数=值(每月计数)`以引用本应插入的值。SELECT中的列似乎与INSERT中的列名不“对齐”。(看起来,domain
正在被放入updated
列。UNIQUE(domain,Month)
?我将使用“…UPDATE count\u per\u Month=VALUES(count\u per\u Month)…”引用本应插入的值。您选择的列似乎与插入的列名不“对齐”。(看起来像是域
被放入更新的
列中。所以基本上如果域和月是唯一的,它会插入,否则它会更新?所以基本上如果域和月是唯一的,它会插入,否则它会更新?