Задать вопрос
@My1Name

Как сделать INSERT в две таблицы в одном запросе?

Как объединить в одном обращении к MySQL две (три) команды? Я пытаюсь с помощью jdbcTemplate выполнить INSERT, добавив в одной таблице - две записи, а в другой - одну.
jdbcTemplate.update("INSERT INTO statusChat VALUES("+id1+", "invited), ("+id2+", invite); INSERT INTO invites VALUES(?,?,?,?);",id2,id1,name,pageUrl);

Пробовал START TRANSACTION; BEGIN ... COMMIT; всё тщетно.
  • Вопрос задан
  • 286 просмотров
Подписаться 1 Простой 8 комментариев
Решения вопроса 1
@My1Name Автор вопроса
Как сделать INSERT в две таблицы в одном запросе?

Использовать batchUpdate. Например так:
jdbcTemplate.batchUpdate(new String [] {
"DELETE FROM statusChat WHERE id IN("+id1+", "+id2+") LIMIT 2",
"DELETE FROM invites WHERE id="+id1+" AND idInviter="+id2
});

Для более сложных запросов с неизвестным количеством параметров, можно использовать BatchPreparedStatementSetter. Например:
ArrayList <Long> listID;
		String SQL = "DELETE FROM statusChat WHERE id IN(?";
		for(int i=0; i<(listID.size()-1; i++)
			SQL = SQL+",?"; SQL=SQL+")";
		jdbcTemplate.batchUpdate(SQL, new BatchPreparedStatementSetter() {
			@Override
			public void setValues(PreparedStatement ps, int i) throws SQLException {
				i=1;
				for (int x=0; x<listID.size(); x++, i++) {
					long id = listID.get(x);
					ps.setLong(i, id));
				}
			}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Ты можешь открыть транзакцию и сделать два инсерта в разные таблички. И с точки зрения БД
это будет иметь смысл атомарного действия.

Или ты другое хотел?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы