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