我有一个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
它。
但是,我只想做一个查询。
答案 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
。
如果您还没有听说过UNIQUE
:http://www.tutorialspoint.com/sql/sql-unique.htm
答案 2 :(得分:4)
如果我是你,我会在列上强制执行UNIQUE
约束,
ALTER TABLE ip_list ADD CONSTRAINT IP_Unique UNIQUE(ip_addr)
答案 3 :(得分:3)
答案 4 :(得分:3)
尝试MySQL INSERT IGNORE声明。