하나의 단위로 묶인 작업들이 100% 적용되었거나 아무것도 적용되지 않음을 보장해주는 것이다.
트랜잭션 내 작업중 중간에 작업이 실패해도 이전에 성공한 작업들을 일일이 롤백하지 않아도 된다.
트랜잭션 전파란 트랜잭션을 시작하거나 기존 트랜잭션에 참여하는 방법을 결정하는 속성이다.
선언적 트랜잭션의 장점은 여러 트랜잭션을 묶어서 커다란 트랜잭션 경계를 만들 수 있다는 것
REQUIRED
: defaultREQUIRES_NEW
MANDATORY
NOT_SUPPORTED
NEVER
NESTED
동시에 여러 트랜잭션이 진행될 때에 트랜잭션의 작업 결과를 여타 트랜잭션에게 어떻게 노출할 것인지를 결정하는 기준이다.
Dirty Reads
A dirty read occurs when a transaction reads data that has not yet been committed. For example, suppose transaction 1 updates a row. Transaction 2 reads the updated row before transaction 1 commits the update. If transaction 1 rolls back the change, transaction 2 will have read data that is considered never to have existed.
Nonrepeatable Reads
A nonrepeatable read occurs when a transaction reads the same row twice but gets different data each time. For example, suppose transaction 1 reads a row. Transaction 2 updates or deletes that row and commits the update or delete. If transaction 1 rereads the row, it retrieves different row values or discovers that the row has been deleted.
Phantoms
A phantom is a row that matches the search criteria but is not initially seen. For example, suppose transaction 1 reads a set of rows that satisfy some search criteria. Transaction 2 generates a new row (through either an update or an insert) that matches the search criteria for transaction 1. If transaction 1 reexecutes the statement that reads the rows, it gets a different set of rows.
DEFAULT
: DB DRIVER 나 DB의 설정값을 따른다.
READ_UNCOMMITED
: 가장 낮은 격리수준.
READ_COMMITED
REPEATABLE_READ
SERIALIZABLE