есть ли в любом случае возможность SQL обновить несколько элементов в списке без использования циклов for?

#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,