#java #mysql #list #loops
Вопрос:
Я работаю над своей функцией, и она работает хорошо, но я хочу оптимизировать метод, чтобы повысить производительность, вот мой код:
for (Foo foo: duplicateElement) { String replace = duplicateElement.getName() .replace( split name split, split); duplicateElement.setName(replace); foo.updateFoo(duplicateElement); }
Приведенный выше код выполняется, но могу ли я каким-то образом удалить вызов SQL updateFoo из циклов for и все равно заставить его работать? Заранее спасибо!
Ответ №1:
Сгенерируйте этот запрос IODKU (upsert) :
INSERT INTO tbl (key, col2, col3) VALUES (11, 22, 33), (43, 54, 65), ... ON DUPLICATE KEY UPDATE col2 = VALUES(col2), col3 = VALUES(col3) ;
Для этого требуется, чтобы столбец key
был UNIQUE
или PRIMARY
. Он попытается вставить заданные строки, но обнаружит, что они существуют. Затем он переключится на обновление указанных столбцов.
Вместо этого MySQL 8.0 нуждается в этом синтаксисе:
col2 = NEW.col2,