MySQL INSERT IGNORE/ON DUPLICATE KEY UPDATE 不检测重复项

标签 mysql duplicates

我在这里遇到了一个问题,在谷歌搜索 Stackoverflow 答案 2 小时并测试了不同的想法后,我无法弄清楚。希望这对外面的人来说是一个明智的选择。

编辑:已修复!请参阅下面的解决方案。

这是我的代码:

// Establish Table and vars
mysql_query("CREATE TABLE IF NOT EXISTS pages(page varchar(255), content varchar(255))");
$page = 'Hello'; $content = 'This is the content.';

// Ive tried this:
mysql_query("INSERT INTO pages SET page='$page' ON DUPLICATE KEY UPDATE content='$content'");

// Ive also tried:
mysql_query("INSERT IGNORE INTO pages SET page='$page', content='$content'"));
mysql_query("INSERT IGNORE INTO pages SET page='$page'")); // No content

预期结果: 创建一行,其中“page”值为“Hello”(“content”值为“This is the content.”)。当脚本第二次运行时,不会创建额外的行,因为已经有一行的 'page' 值为 'Hello'。

观察到的结果:每次运行脚本时,都会创建一个页面值为“Hello”的新行,这可能是因为这不是重复键。为什么不买?我曾尝试创建一个 ID 字段为 AUTO_INCREMENT 和主键的表,但我认为这是导致问题的原因,所以我简化了它。

(那个代码是:)

mysql_query("CREATE TABLE IF NOT EXISTS pages(id INT AUTO_INCREMENT NOT NULL, page varchar(255), content varchar(255), primary key (id))");

期望的结果:如果没有行的“page”字段为“Hello”,则应将新行插入到表中。创建后,再次运行相同的脚本不应产生新行。

谢谢!

编辑:已修复!请参阅下面的解决方案。

我的解决方案:

// Table needs a primary key to search for duplicates.
    mysql_query("CREATE TABLE IF NOT EXISTS pages(page varchar(255), content varchar(255), primary key (page))"); // Establish Table

最佳答案

您的 page 字段需要是 PRIMARY KEY 或具有 UNIQUE 索引,ON DUPLICATE KEY UPDATE 才能工作。尝试:

CREATE TABLE IF NOT EXISTS pages(page varchar(255), content varchar(255), primary key (page))

关于MySQL INSERT IGNORE/ON DUPLICATE KEY UPDATE 不检测重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12876104/

相关文章:

安卓 :app:transformClassesWithJarMergingForDebug FAILED - ZipException: duplicate entry

mysql - 在 ruby​​ 项目中将 mysql 更改为 postgresql 的最佳方法是什么

mysql - 我可以在我的商业 windows 项目中使用 mySQL 吗?

javascript - 为什么这个mysql错误导致nodejs崩溃而不是去catch函数?

r - 通过保留所有行来查找重复行计数

mysql - 更新MYSQL中的重复行以进行逻辑删除

mysql - 余额趋势分析

php - PHP 中的 mysql_query 参数

algorithm - 4 字节散列算法比较小文本(通常小于 2 kb)

linux - 删除重复的 shell 命令