The notion of concurrency control is closely tied to the notion of
a ``transaction''.
A transaction defines a set of ``indivisible'' steps,
that is,
commands with
the Atomicity, Consistency, Isolation, and Durability (ACID) properties:
Atomicity:
Either all or none of the steps of the transaction occur so that the invariant of the shared
object is maintained.
A transaction is typically aborted by the system in response to failures
but it may be aborted
also by a user to ``undo'' the actions.
In either case,
the user is informed about the success or failure of the transaction.
Consistency:
A transaction takes a shared object from one legal state to
another, that is, maintains the invariant of the shared object.
Isolation:
Events within a transaction are hidden from other
concurrently executing transactions.
Techniques for achieving isolation are called
synchronization schemes.
They determine how these transactions are scheduled,
that is,
what the relationships are between the times the different
steps of these transactions.
Isolation is required to ensure that concurrent transactions
do not cause an illegal state in the shared object and to
prevent cascaded rollbacks when
a transaction aborts.
Durability:
Once the system tells the user that a transaction has completed
successfully,
it ensures that values written by the database system persist
until they are explicitly overwritten by other transactions.
It is the isolation property that relates the transaction concept with concurrency control. Therefore, we will focus mainly on synchronization schemes, which we will also call concurrency schemes.