当前位置: 首页 > 面试题库 >

MySQL:在不存在的地方插入

孔驰
2023-03-14
问题内容

我尝试插入新用户(如果用户表中不存在该用户),我尝试了此查询,但收到错误:

INSERT INTO USER (name,email)
VALUES ('John','john@mmm.com')
WHERE NOT EXISTS
    (SELECT id FROM USER WHERE email = 'john@mmm.com')

如果不存在,如何插入用户?

错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where not exists (select id from user where email = 'john@mmm.com')' at line 5

谢谢,


问题答案:

用途insert . . . select

INSERT INTO USER (name, email)
    SELECT 'John', 'john@mmm.com'
    WHERE NOT EXISTS
        (SELECT id FROM USER WHERE email = 'john@mmm.com');

我可以这样写:

INSERT INTO USER (name, email)
    SELECT name, email
    FROM (SELECT 'John' as name, 'john@mmm.com' as email) t
    WHERE NOT EXISTS (SELECT 1 FROM USER u WHERE u.email = t.email);

但是更好的方法可能只是放入一个唯一索引,以便数据库保护数据:

create unique index idx_users_email on user(email);


 类似资料:
  • 我有一个我认为是完全琐碎的查询-插入值到一个表中,如果一个值与匹配的ID不存在: 我在where语句周围得到一个错误。为什么?我如何实现我的目标?

  • 问题内容: 我有一个连接两个表的MySQL查询 选民 住户 他们加入并。 现在,我需要做的是修改它,在投票器表与第三个表称为“消除”的地方,沿着和相连。但是要注意的是,我要排除选民表中在淘汰表中具有相应记录的所有记录。 如何制作查询来做到这一点? 这是我当前的查询: 问题答案: 我可能会使用,即使没有匹配项也会返回行,然后可以通过检查s 仅选择不匹配的行。 因此,类似: 与使用子查询相比,效率更高

  • 我想生成一个sql查询来批量插入一系列表中不存在的行。我当前的设置为每个记录插入创建了一个新的查询,类似于PostgreSQL中WHERE NOT EXISTS in PostgreSQL Gets syntax error中详细介绍的解决方案,但我想将其移动到单个查询以优化性能,因为我当前的设置一次可以生成几百个查询。现在我正在尝试下面添加的示例: Postgres返回以下错误: 问题是,Pos

  • 问题内容: 我想将插入查询与“不存在的地方”组合起来,以免违反PK约束。但是,如下所示的语法给我一个错误- 我该怎么做? (通常,您可以将插入内容与where子句结合使用吗?) 问题答案: 编辑: 阅读马丁斯链接后,如果承认,最好的解决方案是:

  • 问题内容: 我从谷歌搜索开始,发现这篇文章讨论了互斥表。 我有一张约有1400万条记录的表。如果我想添加更多相同格式的数据,是否有一种方法可以确保在不使用一对查询的情况下我要插入的记录不存在(即,要检查的一个查询和要插入的一个是结果集是空)? 如果字段上存在约束,是否可以保证该约束将失败? 似乎 只有 一个约束,当我通过php发出插入命令时,脚本就发出了嘶哑的声音。 问题答案: 采用 见http:

  • 问题内容: 是否有只查询记录的查询,如果不存在,则插入?我不想重复更新或替换。寻找一个查询解决方案,寻找其他答案,但不是我真正想要的。 表: 伪查询: 问题答案: 使用-与INSERT完全相同,不同之处在于,如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前会删除该旧行。 http://dev.mysql.com/doc/refman/5.0/en/rep