23

我有一个mysql表ip_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它。

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

4

5 回答 5

26

您可以使用以下查询。当您的表中不存在时,它将在此处插入 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'
);
于 2013-04-09T09:46:44.923 回答
8

您应该添加一个 UNIQUE 键ip_addr,然后使用INSERT IGNORE.

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

于 2013-04-09T09:45:54.917 回答
4

如果我是你,我UNIQUE会对列施加约束,

ALTER TABLE ip_list ADD CONSTRAINT IP_Unique UNIQUE(ip_addr)
于 2013-04-09T09:46:48.400 回答
4

您可以使用Insert...on 重复密钥更新来做到这一点

或者

或者你也可以使用替换

于 2013-04-09T09:46:54.387 回答
3

试试 MySQL INSERT IGNORE语句。

于 2013-04-09T09:47:04.093 回答