2012-03-06 36 views
0

我正在運行數據庫日誌,每天都登錄一個新行。因此,我的Mysql查詢檢查日期(日期(唯一鍵))是否已經存在,如果是,它會嘗試將日誌行的所有可記錄值加1。如果日期記錄沒有眼睛,它會創建一個新的行。UPON DUPLICATE KEY增加多列?

我的SQL查詢:

INSERT INTO `log` (`date`,`hits`,`stale`) 
VALUES ('2012-03-06',1,1) 
ON DUPLICATE KEY 
UPDATE `hits`=`hits`+1,`stale`=`stale`+1 
WHERE `date`='2012-03-06';" 

所有列有0爲默認值,所以如果此查詢直接午夜只有「過時」和「點擊」設置爲1,否則「過時」和後運行'命中'都增加。

我希望! (它不起作用)。

我錯過了什麼?我應該在'hits'='hits'+1'stale'='stale'+ 1之間使用哪個分隔符?

回答

0

你不應該有WHERE條款。 ON DUPLICATE KEY UPDATE會自動將其影響的行限制爲具有現有密鑰的行。

刪除它,你的查詢應該可以正常工作。

1

剛剛擺脫WHERE子句:

INSERT INTO `log` (`date`,`hits`,`stale`) 
VALUES ('2012-03-06',1,1) 
ON DUPLICATE KEY 
UPDATE `hits`=`hits`+1,`stale`=`stale`+1; 
1

您的分隔符是正確的,但UPDATE已經找到重複的行以便能夠觸發ON DUPLICATE KEY,因此您不需要嘗試使用WHERE再次選擇它。

INSERT INTO `log` (`date`,`hits`,`stale`) 
VALUES ('2012-03-06',1,1) 
ON DUPLICATE KEY 
UPDATE `hits`=`hits`+1,`stale`=`stale`+1 

演示here

+0

謝謝!不知何故,我認爲它只用了一個增量而不是用第二個,但沿着這一行的somwehere,我想我添加了WHERE子句...... – wallflux 2012-03-06 19:52:01

0

如果你只想做更新,如果一些特定的表達式爲true,你可以用兩個語句做到這一點:

INSERT IGNORE INTO x VALUES (.....); 
UPDATE x SET ..... WHERE .....; 

INSERT如果有重複的鍵將靜默失敗。

相關問題