In computer science, in the field of databases, optimistic concurrency control, (OCC) is a concurrency control method used in relational databases without using locking. It is commonly referred to as optimistic locking, a reference to the non-exclusive locks that are created on the database.
Optimistic concurrency control is based on the assumption that most database transactions don't conflict with other transactions, allowing OCC to be as permissive as possible in allowing transactions to execute.
There are three phases in an OCC transaction:
If a conflict exists, a conflict resolution algorithm must be used to resolve the conflict somehow (ideally by minimizing the number of changes made by the user) or, as a last resort, the entire transaction can be aborted (resulting in the loss of all changes made by the user).
Optimistic concurrency is generally used in environments with a low contention for data. When conflicts are rare, validation can be done efficiently, leading to higher throughput than other concurrency control methods. However, if conflicts happen often, the cost of repeatedly restarting transactions, hurts performance significantly — other non-lock concurrency control methods have better performance when there are many conflicts.
The stateless nature of [
] makes locking infeasible for web user interfaces. It's common for a user to start editing a record, then leave without following a "cancel" or "logout" link. If locking is used, other users who attempt to edit the same record must wait until the first user's lock expires.
OCC is a natural choice. It is simple to implement and avoids unnecessary waiting or silently overwritten records. Typically the form presented to the user includes a hidden field with the record's original content, a timestamp, a sequence number, or an opaque token. On submit, this is compared against the database. If it differs, the conflict resolution algorithm is invoked.

