Транзакции: мгновенный обмен денег на нашем сайте
Transaction (транзакция) - это операция, которая обеспечивает устойчивость изменений в базе данных путем группировки нескольких операций в единый блок, который либо выполнится полностью, либо не выполнится вообще.
Типичный пример транзакции - это перевод денежных средств с одного банковского счета на другой. Если транзакции не будет выполнена полностью, то деньги могут быть потеряны. Транзакция реализуется с помощью команды "BEGIN" для начала транзакции, "COMMIT" для фиксации изменений в базе данных и "ROLLBACK" для отмены изменений в случае ошибки.
Пример кода на языке SQL для создания транзакции, которая изменяет две таблицы:
BEGIN TRANSACTION;
UPDATE table1 SET column1 = 'new value' WHERE id = 1;
UPDATE table2 SET column2 = 'new value' WHERE id = 1;
COMMIT;
В этом примере команда "BEGIN TRANSACTION" начинает транзакцию, после чего выполняются две операции UPDATE, которые изменяют значения в колонках в таблицах table1 и table2. После завершения всех операций транзакции команда "COMMIT" подтверждает изменения в базе данных.
Если любая из операций в транзакции вызывает ошибку, то транзакция отменяется с помощью команды "ROLLBACK", и все изменения в базе данных, связанные с транзакцией, отменяются.
Пример кода на языке Java для создания транзакции с помощью JDBC:
Connection conn = null;
try {
conn = getDBConnection();
conn.setAutoCommit(false);
PreparedStatement stmt1 = conn.prepareStatement("UPDATE table1 SET column1 = ? WHERE id = ?");
stmt1.setString(1, "new value");
stmt1.setInt(2, 1);
stmt1.executeUpdate();
PreparedStatement stmt2 = conn.prepareStatement("UPDATE table2 SET column2 = ? WHERE id = ?");
stmt2.setString(1, "new value");
stmt2.setInt(2, 1);
stmt2.executeUpdate();
conn.commit();
} catch (SQLException e) {
if (conn != null) {
try {
conn.rollback();
} catch (SQLException ex) {
}
}
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
}
}
}
В этом примере создается соединение с базой данных через JDBC, после чего устанавливается режим автоматической фиксации на false с помощью команды "conn.setAutoCommit(false)", что означает, что изменения должны быть зафиксированы явно командой "conn.commit()". Далее выполняются два SQL-запроса UPDATE, которые изменяют значения в таблицах table1 и table2. Если произойдет ошибка, то транзакция будет отменена с помощью команды "conn.rollback()". Когда все операции выполнены без ошибок, транзакция будет зафиксирована командой "conn.commit()". Наконец, соединение с базой данных закрывается с помощью команды "conn.close()".