2012-10-13 125 views
0

我在这里有一个问题,经过2个小时的谷歌搜索Stackoverflow的答案和测试不同的想法,我无法弄清楚。希望对那里的人来说,这是一个不容小觑的想法。MySQL插入IGNORE /在重复密钥更新不检测重复

编辑:修正!见下面的解决方案

这里是我的代码:

// 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'的行。

观察结果:每次脚本运行时,都会创建一个页面值为“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))"); 

所需的结果:“你好”一个新行应该插入到表中是否存在与的“页面”字段中没有列一旦创建完成,再次运行相同的脚本不应该导致新行。

谢谢!

编辑:修正!见下面的解决方案

我的解决办法:

// 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 

回答

2

page字段需要一个PRIMARY KEY或有对重复密钥更新上有一个唯一索引工作。尝试:

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

是的,这是一个!谢谢。 – Trey

2

由于查询说...上的重复KEY。只有在插入操作违反表上的唯一约束时才会触发。如果没有密钥,数据库将不会扫描整个表以查看是否有重复。

+0

是的,谢谢! – Trey