如何仅在记录尚不存在时才添加到MySQL表中?

问题描述:

我从JSON对象中获取字符串数组。我想将这些字符串保存在数据库中,但前提是它们不在那里。将数据库中已有内容与我即将进入的内容进行比较并排除匹配的最佳方法是什么?如何仅在记录尚不存在时才添加到MySQL表中?

我正在使用PHP和MySQL。

+0

[`INSERT ... ON DUPLICATE KEY UPDATE`](http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html)另请参阅:[“INSERT IGNORE” vs“INSERT ... ON DUPLICATE KEY UPDATE”](http://*.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update) – troelskn 2009-06-11 18:04:18

由于你的描述是想,如果已经存在的字符串先不谈记录一下,你可能想什么IGNORE修饰符INSERT(即你做INSERT IGNORE ...)。如果找到重复密钥,这将使您的查询不会执行任何操作。当然,这需要你插入的字符串字段有唯一的键。

REPLACE可以做你想做的事 - 它会插入,但是如果主键已经存在,那么该行首先被删除。除非你需要保留表格中的其他列,否则它应该起作用。

http://dev.mysql.com/doc/refman/5.0/en/replace.html

在MySql中,您可以使用带有“ignore”选项的插入语句,如果其唯一字段与现有行的唯一字段匹配,则不会插入行。该表格必须包含相关字段的唯一性约束。

很简单的例子:

您的表:用户 您的字段:users_id,USER_NAME,ZIP_CODE,创建 唯一索引:USER_NAME

INSERT INTO用户(USER_NAME,ZIP_CODE,创建) VALUES ( 'joe',75034,'2009-06-11') ON DUPLICATE KEY UPDATE users_id = LAST_INSERT_ID(id)

user_name具有唯一索引;所以,你不能多次添加它。当你使用上面的SQL时,它会在第一次加入。第二次,它实际上不会插入。设置重复键的方式,你现在可以用PHP从mysql中获取最后一个insert id,并且知道users_id是一个真正的插入还是重复的。