Ответ 1
Используйте 'REPLACE INTO':
REPLACE INTO table SET id = 42, foo = 'bar';
Подробнее в Документация по MySQL
Не удивительно, чтобы слова были короткими, хе-хе.
В любом случае, я хочу, чтобы в основном обновить запись в таблице, если она существует, в противном случае создать новую, заполнив ее теми же данными.
Я знаю, что это легко, но я относительно новичок в MySQL с точки зрения того, насколько я его использовал: P
Используйте 'REPLACE INTO':
REPLACE INTO table SET id = 42, foo = 'bar';
Подробнее в Документация по MySQL
Многие разработчики все еще выполняют запрос, чтобы проверить, присутствует ли поле в таблице, а затем выполнить запрос на вставку или обновление в соответствии с результатом первого запроса. Попробуйте использовать синтаксис 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).
Как говорили другие, REPLACE
- это путь. Просто будьте осторожны с этим, потому что на самом деле он делает DELETE
и INSERT
в таблице. Это нормально в большинстве случаев, но если у вас есть внешние ключи с ограничениями типа ON DELETE CASCADE
, это может вызвать некоторые большие проблемы.
Посмотрите 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)