Я думаю, что вы думаете о транзакциях, когда говорите «замки». На самом низком уровне ваш сервер базы данных уже гарантирует, что параллельные операции чтения не повредят ваши таблицы.
Но если вы хотите обеспечить согласованность между таблицами, вам нужно использовать транзакции. Проще говоря, то, что предоставляют вам транзакции, является гарантией «все или ничего». То есть, если вы хотите вставить Order в одну таблицу и связанные OrderItems в другую таблицу, вам нужна гарантия того, что если вставка OrderItems завершится неудачно (на шаге 2), изменения, внесенные в таблицы Order (шаг 1), также будут откатиться назад. Таким образом, вы никогда не окажетесь в ситуации, когда строка в таблице Order не имеет связанных строк в элементах Order.
Это, конечно, очень упрощенное представление о том, что такое транзакция. Вы должны прочитать об этом больше, если вы серьезно относитесь к программированию баз данных.
В Java вы обычно проводите транзакции примерно следующим образом:
- Установите
autocommit
на false
на вашем соединении jdbc
- Выполнить несколько вставок и / или обновлений, используя одно и то же соединение
- Позвоните
conn.commit()
, когда все вставки / обновления, которые идут вместе, сделаны
- Если во время шага 2 возникла проблема, позвоните по номеру
conn.rollback()