读《高性能MySql》这本书,md,里面很多的sql语句都不懂什么意思!!!故再次记录。
ON DUPLICATE KEY UPDATE
INSERT INTO daily_hit_counter(day,slot,cnt)
VALUES(CURRENT_DATE,RAND()*100,1)
ON DUPLICATE KEY UPDATE cnt=cnt+1;
在insert语句末尾指定了 ON DUPLICATE KEY UPDATE ,那么如果在执行插入的时候导致一个UNIQUE或者主键重复,则在旧数据的基础上执行update操作,操作内容下载UPDATE 关键字后面。
USING()
UPDATE daily_hit_counter as c
INNER JOIN(
SELECT day,SUM(cnt) as cnt,MIN(slot) AS mslot
FROM daily_hit_counter
GROUP BY day
) AS x USING(day)
SET c.cnt = IF(c.cnt=x.mslot,x,cnt,0),
c.slot = IF(c.slot=x.mslot,0,c.slot);
using()相当于join操作中的on。