MySQL: добавление строки с определенным значением, если ее нет в таблице - PullRequest
2 голосов
/ 01 декабря 2010

У меня есть таблица настроек со столбцом UNIQUE, например, test. Я хочу вставить строку со столбцом test, только если в таблице еще нет строки с test. Я знаю, что мог бы просто выполнить запрос INSERT, и он бы вывел ошибку, если бы она уже существовала (и не нанесла бы никакого вреда AFAIK), но есть ли способ сделать это правильно, используя только MySQL? Я уверен, что это можно сделать с помощью функций, но я никогда не использовал их раньше, и я думаю, что есть более простой способ.

Спасибо за помощь, я ценю это!

Ответы [ 4 ]

4 голосов
/ 01 декабря 2010

Похоже на работу для INSERT IGNORE :

Если вы используете ключевое слово IGNORE, ошибки которые происходят во время выполнения ВСТАВКИ Заявление рассматривается как предупреждение вместо. Например, без IGNORE, строка, которая дублирует существующий УНИКАЛЬНЫЙ индекс или значение ПЕРВИЧНОГО КЛЮЧА в таблица вызывает ошибку двойного ключа и заявление отменяется. С IGNORE, строка все еще не вставлена, но ошибка не выдается.

2 голосов
/ 01 декабря 2010

Примерно так должно работать

INSERT INTO TABLE(column1,column2)
SELECT value1, value2
WHERE 1 NOT IN (SELECT 1 FROM TABLE WHERE test='test')
1 голос
/ 01 декабря 2010

Вы можете использовать ключевое слово IGNORE, например:

INSERT IGNORE INTO table_name (test) VALUES('my_value');

Из документации MySQL :

Если вы используете ключевое слово IGNORE, ошибкивозникающие при выполнении оператора INSERT вместо этого обрабатываются как предупреждения.Например, без IGNORE строка, которая дублирует существующий индекс UNIQUE или значение PRIMARY KEY в таблице, вызывает ошибку дубликата ключа, и оператор прерывается.При IGNORE строка по-прежнему не вставляется, но ошибка не выдается.

Если вы хотите обновить существующую строку, а не полностью игнорировать повторяющееся обновление, проверьте ключ ON DUPLICATE.ОБНОВЛЕНИЕ Синтаксис .

0 голосов
/ 01 декабря 2010

INSERT IGNORE (v, b, g) VALUES (1.2.3) ничего не сделает, если вы нажмете клавиши (первичные или уникальные), но тогда вы должны знать свои ключи.или, как сказал Джон, с заранее заданными данными

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...