插入查询检查记录是不是存在 - 如果不存在,插入它[重复]

Posted

技术标签:

【中文标题】插入查询检查记录是不是存在 - 如果不存在,插入它[重复]【英文标题】:Insert query check if record exists - If not, Insert it [duplicate]插入查询检查记录是否存在 - 如果不存在,插入它[重复] 【发布时间】:2013-03-31 16:27:43 【问题描述】:

我有一个mysqlip_list...

+----+---------------+
| id |    ip_addr    |
+----+---------------+
|  1 | 192.168.100.1 |
|  2 | 192.168.100.2 |
|  3 | 192.168.100.3 |
|  4 | 192.168.100.4 |
|  5 | 192.168.100.5 |
+----+---------------+

我只想添加不在ip_addr 列中的记录。 前任

我有以下记录要添加到ip_addr 表中

192.168.100.6
192.168.100.10
192.168.100.11
192.168.100.1   //already in column
192.168.100.12

我不想添加192.168.100.1,因为它已经在列中。

那么,INSERT 查询是否可以先检查记录再插入?

目前,我正在这样做......首先我SELECT记录然后匹配它,然后INSERT它。

但是,我只想处理一个查询。

【问题讨论】:

是另一张表的记录/。 您可以在 ip 列中添加唯一索引,然后您将得到 INSERT .. ON DUPLICATE KEYINSERT IGNORE ip_addr 设为unique 字段 在我自己看来,在列上添加唯一约束会是一个更好的主意。 @YogeshSuthar 是的,这就是我想要的,让我检查它的工作与否 【参考方案1】:

您应该在ip_addr 上添加一个唯一键,然后使用INSERT IGNORE

如果您还没有听说过UNIQUE,也许这会有所帮助:http://www.tutorialspoint.com/sql/sql-unique.htm

【讨论】:

+1 为您的回答点赞,谢谢【参考方案2】:

您可以使用以下查询。当您的表中不存在时,它将在此处插入 ip_address。

INSERT INTO ip_list (ip_addr)
SELECT * FROM (SELECT '192.168.100.1') AS tmp
WHERE NOT EXISTS (
    SELECT ip_addr FROM ip_list WHERE ip_addr='192.168.100.1'
);

【讨论】:

Ekach 号码 yogesh bhau。 +1 为您的回答点赞,谢谢 :) @YogeshSuthar 再次感谢 :) 我想这样做已经有 10 年了,但从未想过要在 Google 上搜索它。刚刚接受了 2 个查询 - 选择然后插入。这太棒了! 超级方法。有没有办法一次将其扩展到多个值?例如检查 192.168.100.1 和 192.168.100.2 是否存在,否则插入两者。【参考方案3】:

如果我是你,我会在列上强制执行 UNIQUE 约束,

ALTER TABLE ip_list ADD CONSTRAINT IP_Unique UNIQUE(ip_addr)

【讨论】:

+1 为您的回答点赞,谢谢【参考方案4】:

你可以用Insert...on duplicate key update做到这一点

或者你也可以使用Replace

【讨论】:

+1 为您的回答点赞,谢谢 替换,多么伟大的发明!谢谢【参考方案5】:

试试 MySQL INSERT IGNORE 语句。

【讨论】:

+1 为您的回答点赞,谢谢

以上是关于插入查询检查记录是不是存在 - 如果不存在,插入它[重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查记录是不是存在,如果是,则“更新”,如果不“插入”

如何使用 .forEach() 插入多个集合并检查它是不是存在

检查 Laravel 中是不是存在记录不起作用

如何检查记录是不是已经存在,然后在 laravel 中更新或插入?

Mysql,检查行是不是存在,如果它确实获取值,如果不插入

SQL检查是不是存在并插入[重复]