什么会导致ON DUPLICATE KEY UPDATE语句将值增加2而不是1, 这是SQL即时使用:
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,可能是什么错误?
更新: 这个方法在smarty模板中调用,如: {app_banner :: getRandomBanner()}
答案 0 :(得分:2)
检查你的代码中是否没有两次调用查询 - 它本身就可以正常工作。
答案 1 :(得分:1)
此查询将增加多个值的唯一原因是,如果它被多次调用。在调用查询的位置将echo ('<p>Query being run</p>')
放入代码中。您应该看到它一次,如果您不止一次看到它,那么代码将被多次运行。
在这种情况下,交互式调试也可能非常有用,如果您安装了xdebug之类的调试模块,您可以使用它来单步执行代码并查看它正在做什么。
答案 2 :(得分:1)
桌子上有triggers的任何可能吗?
SHOW TRIGGERS LIKE 'banner%'\G
答案 3 :(得分:1)
Silver Light是正确的,您正在调用代码两次。如果您没有在代码中明确地这样做,即:
inc3x();
inc3x();
然后,您可能正在加载该页面两次。如果在文档中包含空src,则会发生这种情况。例如:
<script src=""></script>
使用浏览器检查所有正在加载的资源文件。
答案 4 :(得分:0)
我遇到了这个问题,并将其缩小为以下CSS代码:
body {
background-image:url();
}
如果没有为background-image
指定图片网址,则会导致整个网页在某些浏览器中重新加载(如文档here所述)。我遇到了Chrome(第23版)的问题,但不是IE 10。