У меня есть таблица 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
их.
но я хочу сделать только один запрос.
Вы можете использовать нижеприведенный запрос. Здесь он будет вставлять 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' );
Вы должны добавить ключ UNIQUE на ip_addr
а затем использовать INSERT IGNORE
.
Возможно, это поможет, если вы еще не слышали об UNIQUE
: http://www.tutorialspoint.com/sql/sql-unique.htm
если бы я был вами, я применяю UNIQUE
ограничение для столбца,
ALTER TABLE ip_list ADD CONSTRAINT IP_Unique UNIQUE(ip_addr)
вы можете сделать это с помощью Insert … при повторном обновлении ключа
ИЛИ
в качестве альтернативы вы также можете использовать Replace
Попробуйте инструкцию MySQL INSERT IGNORE .