If (SELECT ...) = 0 INSERT. в MySql - PullRequest
       7

If (SELECT ...) = 0 INSERT. в MySql

3 голосов
/ 28 января 2012

Я привык делать это на сервере SQL

IF (SELECT COUNT(*) FROM table WHERE column1=@value1) = 0
INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3)

Но я не могу заставить его работать в MySql. Пожалуйста, помогите:)

---------------- РЕДАКТИРОВАТЬ ------------------

Я полагаю, что в этом не должно быть много суеты или магии.

If an e-mail does not exist in a table then insert several values into that table.

Вот и все. Желательно встраивать один код в код программирования.

Ответы [ 2 ]

6 голосов
/ 28 января 2012

другой способ сделать это - использовать оператор INSERT IGNORE.Предполагая, что column1 должен содержать только уникальные значения, вы можете добавить ограничение UNIQUE KEY к полю (если это уже не ваш первичный ключ):

ALTER TABLE table ADD UNIQUE KEY column1 (column1)

, тогда вы можете написать свой запрос следующим образом:

INSERT IGNORE INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3)

или если вы хотите автоматически обновить другие поля, используйте ON DUPLICATE KEY UPDATE:

INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3) 
ON DUPLICATE KEY UPDATE column2 = @value2,  column3 = @value3

, позволяя базе данных обрабатывать ее автоматически с использованием уникального ключа, имеет несколько преимуществ:

  • лучшая производительность и масштабируемость за счет использования индексов, а не полного сканирования таблиц
  • отказоустойчивость - вы не можете случайно добавить две строки с одинаковым уникальным идентификатором с неправильным запросом
  • лучшая читаемостьваших запросов

ПРИМЕЧАНИЕ: уникальный ключ может также занимать несколько строк.Глупый пример: комбинация «ip» и «port» может быть объединена как уникальный идентификатор «connection».

0 голосов
/ 28 января 2012

Также вы можете сделать это так:

Declare @count INT;
SET @count = (SELECT COUNT(*) FROM table WHERE column1=@value1);
IF (@count = 0)
INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...