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