MYSQL重复键不起作用

时间:2012-09-22 00:43:40

标签: php mysql duplicates

为什么我的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));

DB:

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));

2 个答案:

答案 0 :(得分:4)

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

修改

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

  

如果指定ON DUPLICATE KEY UPDATE,则插入一行   会在UNIQUE索引或PRIMARY KEY,MySQL中导致重复值   执行旧行的更新。

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

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

例如:

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

此外,在询问数据库问题时,请为相关表格添加SHOW CREATE TABLE

答案 1 :(得分:0)

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

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