如果密钥已存在,请勿插入记录

时间:2014-07-08 15:18:17

标签: mysql sql

我是mysql的新手。请帮忙。 我有一张像这样的人。人们唯一的主要关键是id

id  name  age sex

 1. John  16  M

 2. Peter 18  K

我想写一些sql来向人们插入一些行。但如果名称已经存在 在表中。我没有插入新行。例如,如果我插入名为John和的行 彼得。我不插入行。 我有一个变量名称为var_name;

我已经搜索了很长一段时间的网页。 我使用以下网站推荐的SQL

INSERT into People(name) values(var_name) where not exists(SELECT name from People
where name = var_name)

但是sql语法错误出来了。为什么会这样呢?是否有任何快速的方法来实现我的目标。

2 个答案:

答案 0 :(得分:6)

执行此操作的最佳方法是在名称上创建唯一索引:

create unique idx_people_name on people(name)

然后,当您插入时,请使用on duplicate key update

INSERT into People(name)
    values(var_name)
    on duplicate key update name = values(name);

update件无效 - 它是一个" no-op"。但这会将逻辑放入数据库并强制执行名称必须是唯一的。

要使查询生效,您需要insert . . . selectvalues子句不会使用where语句:

INSERT into People(name) 
    select var_name
    from dual
    where not exists(SELECT name from People where name = var_name);

答案 1 :(得分:0)

如果您对名称有唯一约束,我相信您可以使用:

INSERT IGNORE People(name) VALUES (var_name);