Сначала обновите, затем вставьте, если строка не существует (SQL) Вместо проверки, существует ли строка в первую очередь? - PullRequest
1 голос
/ 18 сентября 2009

Я всегда использовал метод проверки таблицы, чтобы увидеть, существует ли строка, а затем обновил ее новыми данными или вставил, если она не существует, но это заставило меня задуматься о том, что было бы не так просто Обновление, если строки не затронуты, затем выполнить оператор вставки, который потенциально может ускорить мой сценарий и снизить нагрузку на сервер.

Кто-нибудь предвидит какие-либо проблемы с этим?

Ответы [ 4 ]

3 голосов
/ 18 сентября 2009

Что не так с ЗАМЕНА ?

REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для PRIMARY KEY или UNIQUE индекса, старая строка удаляется перед вставкой новой строки.

2 голосов
/ 18 сентября 2009

Если под «посмотреть, существует ли строка» вы подразумеваете под первичным ключом, вас может заинтересовать 12.2.5.3. INSERT ... ON DUPLICATE KEY UPDATE Синтаксис :

Если вы укажете ON DUPLICATE KEY ОБНОВЛЕНИЕ, и вставлена ​​строка, которая приведет к дублированию значения в УНИКАЛЬНЫЙ ИНДЕКС или ПЕРВИЧНЫЙ КЛЮЧ, ОБНОВЛЕНИЕ старого ряда выполняется. За Например, если столбец объявлен как УНИКАЛЬНО и содержит значение 1, следующие два утверждения имеют идентичный эффект:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;

Может быть, вы можете использовать это?

По сравнению с тем, что вы сказали, tt делает все по-другому: пытается вставить, и если возникает ошибка DUPLICATE KEY, она обновляет строку ... Но она позволяет вам не проверять, существует ли строка первой.

Тем не менее, он работает только по первичному ключу / уникальному индексу; не с какой-либо оговоркой где.

1 голос
/ 18 сентября 2009

оператор REPLACE делает то же самое, если строка не существует, она вставит ее, если она существует, она обновит ее.

0 голосов
/ 18 сентября 2009

INSERT IGNORE также полезен здесь.

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