ClassPathResource resource = new ClassPathResource("beans.xml");
XmlBeanFactory factory = new XmlBeanFactory(resource); // Here resource object is provided explicitly
Используйте «REPLACE INTO»:
REPLACE INTO table SET id = 42, foo = 'bar';
См. Больше в документации MySQL
.Многие разработчики все еще выполняют запрос, чтобы проверить, присутствует ли поле в таблице, а затем выполняют запрос вставки или обновления в соответствии с результатом первого запроса. Попробуйте использовать синтаксис ON DUPLICATE KEY, это намного быстрее и лучше, чем выполнение 2 запросов. Более подробную информацию можно найти здесь
ВСТАВИТЬ В таблицу (a, b, c) ЗНАЧЕНИЯ (4,5,6) ON DUPLICATE KEY UPDATE c = 9;
Если вы хотите сохранить то же значение для c, вы можете выполнить обновление с тем же значением
INSERT INTO table (a, b, c) VALUES (4,5, 6) ON DUPLICATE KEY UPDATE c = 6;
разница между «replace» и «on duplicate key»:
replace: вставляет или удаляет и вставляет
для дублирующего ключа: вставляет или обновляет
, если в вашей таблице нет первичного или уникального ключа, замена не имеет никакого смысла.
Вы также можете использовать функцию 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).
Посмотрите ЗАМЕНА в руководстве по MySQL.
REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для PRIMARY KEY или UNIQUE индекса, старая строка удаляется перед вставкой новой строки. См. Раздел 12.2.5, «Синтаксис INSERT».
REPLACE - это расширение MySQL к стандарту SQL. Он либо вставляет, либо удаляет и вставляет. Для другого расширения MySQL к стандартному SQL - который либо вставляет, либо обновляет - см. Раздел 12.2.5.3 , «INSERT ... ON DUPLICATE KEY UPDATE Syntax».
Если у вас есть следующий запрос INSERT:
INSERT INTO table (id, field1, field2) VALUES (1, 23, 24)
Это запрос REPLACE, который вы должны выполнить:
REPLACE INTO table (id, field1, field2) VALUES (1, 23, 24)
Как уже говорили другие, REPLACE
это путь. Просто будьте осторожны, используя его, так как он на самом деле делает DELETE
и INSERT
на столе. Это нормально в большинстве случаев, но если у вас есть внешние ключи с ограничениями, такими как ON DELETE CASCADE
, это может вызвать некоторые большие проблемы.