Подтвердить что ты не робот

Создать, если запись не существует, иначе обновление?

Не удивительно, чтобы слова были короткими, хе-хе.

В любом случае, я хочу, чтобы в основном обновить запись в таблице, если она существует, в противном случае создать новую, заполнив ее теми же данными.

Я знаю, что это легко, но я относительно новичок в MySQL с точки зрения того, насколько я его использовал: P

4b9b3361

Ответ 2

Многие разработчики все еще выполняют запрос, чтобы проверить, присутствует ли поле в таблице, а затем выполнить запрос на вставку или обновление в соответствии с результатом первого запроса. Попробуйте использовать синтаксис ON DUPLICATE KEY, это намного быстрее и лучше, чем выполнение 2 запросов. Более подробную информацию можно найти здесь

INSERT INTO таблица (a, b, c) ЗНАЧЕНИЯ (4,5,6)   ON DUPLICATE KEY UPDATE c = 9;

если вы хотите сохранить одинаковое значение для c, вы можете сделать обновление с тем же значением

INSERT INTO таблица (a, b, c) ЗНАЧЕНИЯ (4,5,6)   ON DUPLICATE KEY UPDATE c = 6;

разница между "replace" и "on duplicate key":

заменить: вставляет или удаляет и вставляет

на дубликат ключа: вставки или обновления

если ваша таблица не имеет первичного ключа или уникального ключа, замена не имеет никакого смысла.

Вы также можете использовать функцию VALUES, чтобы избежать необходимости указывать фактические значения дважды. Например. вместо

INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=6;

вы можете использовать

INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(c);

Где VALUES(c) будет оценивать значение, указанное выше (6).

Ответ 3

Как говорили другие, REPLACE - это путь. Просто будьте осторожны с этим, потому что на самом деле он делает DELETE и INSERT в таблице. Это нормально в большинстве случаев, но если у вас есть внешние ключи с ограничениями типа ON DELETE CASCADE, это может вызвать некоторые большие проблемы.

Ответ 4

Посмотрите REPLACE в руководстве по MySQL.

REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет такое же значение, как новая строка для PRIMARY KEY или UNIQUE индекс, старый строка удаляется до того, как новая строка будет вставлено. См. Раздел 12.2.5, "ВСТАВИТЬ Синтаксис".

REPLACE - это расширение MySQL для Стандарт SQL. Он либо вставляет, либо удаляет и вставляет. Для другого MySQL расширение стандартного SQL - это либо вставки, либо обновления - см. Раздел 12.2.5.3, "INSERT... ON DUPLICATE KEY UPDATE Синтаксис".

Если у вас есть следующий запрос INSERT:

INSERT INTO table (id, field1, field2) VALUES (1, 23, 24)

Это запрос REPLACE, который вы должны запустить:

REPLACE INTO table (id, field1, field2) VALUES (1, 23, 24)