我是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语法错误出来了。为什么会这样呢?是否有任何快速的方法来实现我的目标。
答案 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 . . . select
。 values
子句不会使用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);