The serializable isolation level is the highest and more restrictive of all isolation levels. It protects against dirty, non-repeatable reads and phantom reads. Transactions are executed with locking at all levels (read, range, and write locking), so they appear as if they were executed in a serialized way. In serializable isolation, we will ensure that no issues will happen, but concurrently executing transactions occurs to be serially executing that degrade the performance of the application.
The following is a summary of the relationships between isolation levels and read phenomena:
Levels | Dirty reads | Non-repeatable reads | Phantom reads |
READ_UNCOMMITTED | Yes | Yes | Yes |
READ_COMMITTED | No | Yes | Yes |
REPEATABLE_READ | No | No | Yes |
SERIALIZABLE | No | No | No |
If the isolation level is not explicitly set, then the transaction uses a default isolation level, as per the related database.