mysql - 如果键已经存在,则不要插入记录

标签 mysql sql

我是mysql的新手。请帮忙。 我有一张这样的 table 。 people唯一的主键是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语法错误出来了。为什么会这样。有什么方法可以快速实现我的目标。

最佳答案

最好的方法是在名称上创建一个唯一索引:

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 部分什么都不做——它是一个“空操作”。但这会将逻辑放入数据库并强制要求名称必须是唯一的。

要使您的查询正常工作,您需要 insert 。 . .选择values 子句不采用 where 语句:

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

关于mysql - 如果键已经存在,则不要插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24635601/

相关文章:

php - 在没有注册帐户的情况下识别应用程序的用户

SQL 查询 JOIN 一个表(单独的 ID 和 Titles 表)

mysql - 在 phpmyadmin 中逐行删除

php - 我如何在mysql中创建案例,仅在空时更新字段,如果不空,则转到下一个字段?

mysql - 串联 ID 的串联值

php - while、if 和 else 条件

mysql - 计算唯一字段mysql

php - SQL 更新另一个表中的文本

sql - 如何备份 SQL 2008 表和存储过程?

mysql - 如何处理重复键