Ответ
Консистентность (согласованность) данных в реляционных базах обеспечивается комбинацией механизмов, основанных на принципах ACID.
Ключевые механизмы:
-
Транзакции (Atomicity, Consistency): Группа операций выполняется как единое целое.
Connection conn = dataSource.getConnection(); try { conn.setAutoCommit(false); // Начало транзакции // Выполнение операций INSERT/UPDATE/DELETE conn.commit(); // Фиксация изменений } catch (SQLException e) { conn.rollback(); // Откат в случае ошибки } -
Уровни изоляции (Isolation): Определяют, как транзакции изолируются друг от друга (например, предотвращение "грязного" чтения).
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); -
Ограничения целостности (Constraints): Встроенные правила на уровне БД:
PRIMARY KEY,UNIQUE— гарантируют уникальность.FOREIGN KEY— обеспечивает ссылочную целостность.CHECK— проверяет данные по условию.NOT NULL— запрещает пустые значения.
-
Блокировки (Locking):
- Пессимистичные блокировки: Заблаговременно блокируют данные для изменения.
// JPA пример entityManager.find(User.class, userId, LockModeType.PESSIMISTIC_WRITE); - Оптимистичные блокировки: Используют версионирование для обнаружения конфликтов.
// JPA пример с аннотацией @Version @Entity public class Account { @Id private Long id; @Version private Long version; // Поле для контроля версии // ... другие поля }
- Пессимистичные блокировки: Заблаговременно блокируют данные для изменения.
-
Журналирование (Durability): Гарантирует, что подтвержденные транзакции не будут потеряны.