2010-12-23 41 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的问题。

相关问题