插入查询检查是否存在记录 - 如果不存在,请插入它

时间:2013-04-09 09:43:23

标签: php mysql sql sql-insert

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

但是,我只想做一个查询。

5 个答案:

答案 0 :(得分:19)

您可以使用以下查询。这里将插入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'
);

答案 1 :(得分:8)

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

如果您还没有听说过UNIQUEhttp://www.tutorialspoint.com/sql/sql-unique.htm

,也许这会有所帮助

答案 2 :(得分:4)

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

ALTER TABLE ip_list ADD CONSTRAINT IP_Unique UNIQUE(ip_addr)

答案 3 :(得分:3)

你可以用Insert...on duplicate key update

来做到这一点

OR

或者您也可以使用Replace

答案 4 :(得分:3)

尝试MySQL INSERT IGNORE声明。