2010-12-23 43 views
3

會造成重複鍵UPDATE語句是什麼2,而不是1,增加值, 這裏是使用SQL IM:爲什麼在DUPLICATE KEY UPDATE語句中將值增加2而不是1?

INSERT INTO banner_view (banner_id,date,views) 
VALUES ('10',CURDATE(),'1') 
ON DUPLICATE KEY UPDATE views=(views+1) 

下面是數據庫模式:

CREATE TABLE `banner_view` (
`banner_id` int(11) UNSIGNED NOT NULL , 
`date` date NOT NULL , 
`views` int(10) UNSIGNED NOT NULL , 
PRIMARY KEY (`banner_id`, `date`), 
FOREIGN KEY (`banner_id`) REFERENCES `banner` (`banner_id`) ON DELETE CASCADE ON UPDATE CASCADE, 
UNIQUE INDEX `banner_id` USING BTREE (`banner_id`, `date`) 
) 
ENGINE=InnoDB 
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci 
ROW_FORMAT=COMPACT 
; 

我已檢查MySQL的日誌爲了確保查詢被正確調用3次,但輸出將是6,可能會出錯?

UPDATE: 這種方法被稱爲像智者模板中: {app_banner :: getRandomBanner()}

+1

什麼輸出是6?你從哪裏得到這個輸出?你在做什麼查詢來獲得輸出結果?這是從PHP調用?你能發佈一個更完整的代碼示例嗎? – 2010-12-23 15:25:27

+0

我直接檢查數據庫,價值將始終是預期的兩倍 – Nazariy 2010-12-23 15:27:27

回答

1

銀色光是正確的,您正在調用代碼兩次。如果你不這樣做明確的代碼,即:

inc3x(); 
inc3x(); 

那麼也許你正在加載頁面的兩倍。如果您在文檔中包含空的src,就會發生這種情況。示例:

<script src=""></script> 

使用瀏覽器檢查所有正在加載的資源文件。

2

檢查,如果你是不是在你的代碼中調用查詢兩次 - 它的工作原理是本身的預期。

1

這個查詢將增加值超過一個的唯一原因是,如果它被多次調用。在調用查詢的位置將echo ('<p>Query being run</p>')放入您的代碼中。你應該看一次,如果你看到它不止一次,那麼代碼將被運行多次。

在這種情況下,交互式調試也可以證明是非常有用的,如果您安裝了諸如xdebug之類的調試模塊,則可以使用它來單步執行代碼並查看它的具體操作。

1

有沒有機會在桌子上有任何triggers

SHOW TRIGGERS LIKE 'banner%'\G 
0

我有這個確切的問題,並把範圍縮小到下面的CSS代碼:

body { 
    background-image:url(); 
} 

如果background-image沒有指定圖像的URL,它會導致整個頁面在某些瀏覽器重新加載(如記錄here )。我有Chrome(v23)的問題,但沒有IE 10的問題。

相關問題