【发布时间】:2010-11-02 05:32:39
【问题描述】:
我从一个 JSON 对象中得到一个字符串数组。我想将这些字符串保存在数据库中,但前提是它们不存在。将数据库中已有的内容与我将要输入的内容进行比较并排除匹配项的最佳方法是什么?
我正在使用 PHP 和 MySQL。
【问题讨论】:
标签: php mysql json duplicates unique-key
我从一个 JSON 对象中得到一个字符串数组。我想将这些字符串保存在数据库中,但前提是它们不存在。将数据库中已有的内容与我将要输入的内容进行比较并排除匹配项的最佳方法是什么?
我正在使用 PHP 和 MySQL。
【问题讨论】:
标签: php mysql json duplicates unique-key
由于您所描述的是如果字符串已经存在,则希望单独保留记录,因此您可能想要的是 IGNORE 修饰符到 INSERT(即您执行 INSERT IGNORE ...)。如果找到重复键,这将使您的查询不执行任何操作。当然,这要求您插入的字符串字段具有唯一的键。
【讨论】:
REPLACE 可能会做你想做的事——它会插入,但如果主键已经存在,那么该行将首先被删除。除非您需要保留表中的其他列,否则它应该可以工作。
【讨论】:
在 MySql 中,您可以使用带有“ignore”选项的插入语句,如果其唯一字段与现有行的唯一字段匹配,则不会插入行。该表必须具有包含相关字段的唯一性约束。
【讨论】:
非常简单的例子:
您的表:用户 您的字段:users_id、user_name、zip_code、created 唯一索引:用户名
INSERT INTO 用户(用户名、邮编、已创建) 价值观 ('乔',75034,'2009-06-11') ON DUPLICATE KEY UPDATE users_id=LAST_INSERT_ID(id)
user_name 有唯一索引;因此,您不能多次添加它。当您使用上面的 SQL 时,它会在第一次添加时很好。第二次,它实际上不会插入。设置 on duplicate 键的方式,您现在可以使用 PHP 从 mysql 获取最后一个插入 id,并知道 users_id 是什么是真正的插入或重复。
【讨论】: