如果钥匙已经存在,请不要记录

use*_*463 1 mysql sql

我是mysql的新手.请帮忙.我有一张像这样的人.人们唯一的主要关键是身份证

id  name  age sex

 1. John  16  M

 2. Peter 18  K
Run Code Online (Sandbox Code Playgroud)

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

我已经搜索了很长一段时间的网络.我使用以下网站推荐的sql

INSERT into People(name) values(var_name) where not exists(SELECT name from People
where name = var_name)
Run Code Online (Sandbox Code Playgroud)

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

Gor*_*off 6

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

create unique idx_people_name on people(name)
Run Code Online (Sandbox Code Playgroud)

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

INSERT into People(name)
    values(var_name)
    on duplicate key update name = values(name);
Run Code Online (Sandbox Code Playgroud)

update件作品什么都不做 - 这是一个"无操作".但这会将逻辑放入数据库并强制执行名称必须是唯一的.

为了使您的查询起作用,您需要insert . . . select.该values条款where不作声明:

INSERT into People(name) 
    select var_name
    from dual
    where not exists(SELECT name from People where name = var_name);
Run Code Online (Sandbox Code Playgroud)