如果已经存在,将不会插入的PHP MySQL插入查询

时间:2018-07-02 19:51:19

标签: php mysql sql unique sql-insert

不幸的是,我一直在做一些研究,但是没有发现我能做的任何事情,我认为这是由于我一直在研究的示例中对MySQL构造的不了解。 / p>

我要执行的操作是运行插入查询,并检查3个特定列中的值以确保它们不存在,然后插入,否则什么也不做。

我的表非常基础:id(int11),user(varchar(45)),label(varchar(255)),agent(varchar(255)),empid(varchar(10))。

我的ID是我的主ID,具有自动递增功能,这是我目前可以插入的代码,但没有适当的重复项处理方法:

$i = 0;
foreach ($agents as $ag){
    $sql = mysql_query("INSERT INTO `pms_users` 
    (`id`,`user`,`label`,`agent`,`empid`)
     VALUES 
    (NULL, '$user','$group','$labels[$i]','$ag')");
    $i ++;
}

我需要检查的三列是$ user,$ group和$ ag。

3 个答案:

答案 0 :(得分:4)

(user, label, empid)添加唯一索引。然后数据库将不允许您创建重复项。

ALTER TABLE pms_users
ADD UNIQUE INDEX (user, label, empid);

答案 1 :(得分:3)

如果每个用户,标签和代理的组合只能有一行,则应将它们定义为唯一约束:

ALTER TABLE pms_users ADD CONSTRAINT pms_users_unq UNIQUE (`user`, `label`, `agent`);

然后让数据库使用insert-ignore语句完成繁重的工作:

INSERT IGNORE INTO `pms_users`
(`user`, `label`, `agent`, `empid`)
VALUES ('some_user', 'some_label', 'some_agent', 123)

答案 2 :(得分:1)

您可以尝试在重复键更新查询上插入。它检查重复键。如果它们存在,则MySQL执行更新查询;如果不存在,则MySQL执行插入查询。 确保在数据库中应该声明唯一键。 这是这种情况的MySQL文档 https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html