0

为什么我的ON DUPLICATE KEY UPDATE陈述不起作用,我正在寻求一种在我的表中没有重复项的方法。使用下面的代码,我得到重复

CMS::insertQuery("INSERT INTO {table} SET canid=?, categoryid=? ON DUPLICATE KEY UPDATE canid=?, categoryid=?", array($emailCheck['id'], $id, $emailCheck['id'], $id));

D B:

CREATE TABLE `table` (  `canid` int(10) NOT NULL,  `categoryid` int(10) NOT NULL,  UNIQUE KEY `canid` (`canid`,`categoryid`)) ENGINE=MyISAM DEFAULT CHARSET=latin1

我正在尝试运行的当前行:

CMS::insertQuery("INSERT INTO {table} SET canid=?, categoryid=? ON DUPLICATE KEY UPDATE canid=?, categoryid=? WHERE canid=?, categoryid=?", array($emailCheck['id'], $id, $emailCheck['id'], $id,$emailCheck['id'],$id));
4

2 回答 2

4

这只是一个猜测,因为您没有提供您的架构,但是您的唯一键中的列之一是否可以为空?

编辑:

正如@G-Nugget 在评论中所说,您需要在相关列上使用唯一键:

如果您指定 ON DUPLICATE KEY UPDATE,并且插入的行会导致 UNIQUE 索引或 PRIMARY KEY 中的重复值,MySQL 将对旧行执行 UPDATE。

http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html

您需要在应该唯一的列组合上具有唯一键。

例如:

ALTER TABLE yourTable ADD UNIQUE KEY (`canid`, `categoryid`);

此外,在询问数据库问题时,请包括有SHOW CREATE TABLE问题的表格。

于 2012-09-22T00:46:35.160 回答
0

首先要注意,您要检查重复的字段应该是主要的或唯一的。我遇到了同样的问题,现在解决了。

http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

于 2014-08-16T04:06:04.117 回答