Pessimistic locking refers to a conservative attitude towards data being modified by the outside world, that is, during the data processing process, the data is locked. This function needs to rely on the locking mechanism provided by the database, otherwise even if it is implemented in the system The locking mechanism cannot guarantee that external systems will not modify the data.
Lock mode
LockMode.NONE
No lock Mechanism
LockMode.READ
Hibernate automatically acquires the lock when reading the record
That is, shared lock: (Shared lock, S lock), shared Lock is also called read lock. If transaction T acquires the shared lock on data object A (that is, adding a shared lock to A), then other transactions can only acquire the shared lock (S lock) on A, but cannot add an exclusive lock (X lock). Until A releases all shared locks. Transactions that are granted shared locks can only read data and cannot modify data.
LockMode.WRITE
Hibernate automatically acquires the lock when inserting the update record
That is, exclusive lock: (Exclusive lock, X lock), Exclusive lock is also called write lock. If transaction T acquires the exclusive lock on data A, then T can both read and write A, but until T releases the X lock on A, other transactions can neither acquire the shared lock on A nor the X lock on A. Exclusive lock.
LockMode.UPGRADE
If the database system supports pessimistic locking (such as Oracle and MySQL), execute the select...for update statement (row-level locking, other transactions cannot Perform update, insert and delete statements on it). If the database does not support pessimistic locking (such as Sybase), execute an ordinary select statement.
LockMode.UPGRADE_NOWAIT
has the same functionality as LockMode.UPGRADE. In addition, execute the select...for update nowait statement for the Oracle database. "nowait" means that if the transaction executing the select statement cannot obtain the pessimistic lock immediately, it will not wait for other transactions to release the lock, but will immediately throw a lock exception.
Demonstration of lock
Note: The lock only works on the data objects operated in a transaction, and does not work on the entire database. Locked.
Open two SQL command operation line interfaces, which can represent two transactions T1 and T2. We first execute the commands in the two interfaces respectively: start transaction;
In transaction T1, query the student information with the student number "2015" in the database and add a pessimistic lock to the operated data: select * from stu_info where stu_no="2015" for update;. At this time we can query the corresponding information.
"for update" means adding pessimistic locking. The transaction is not submitted after this query, which means that the lock has not been released.
In transaction T2, query the student information with the student number "2016" in the database and add a pessimistic lock to the operated data: select * from stu_info where stu_no="2016" for update;. At this time we can also query the corresponding information.
The transaction has not been submitted yet
In transaction T2, query the student information with the student number "2015" in the database. This time, do an ordinary select query without locking: select * from stu_info where stu_no=”2015”;. At this time we can also query the corresponding information.
The transaction has not been submitted yet
In transaction T2, try to query the student information of the middle school number "2015" in the database and add a pessimistic lock to the operated data: select * from stu_info where stu_no=" 2015" for update;. At this time we can find that the relevant information is not displayed, but is waiting. When we submit transaction T1 (ie: commit), the data object "2015" releases the pessimistic lock in T1, so that transaction T2 can query the relevant information and obtain the pessimistic lock.
If we change step 5. In the fifth step just now, we modified the student information of the student number to "2016" in transaction T1 but did not add a pessimistic lock, because we had previously added a pessimistic lock to the record in transaction T2 and it has not been released, so we can only wait. Modification can only be successful after T2 is submitted.
Recommended tutorial: "MySQL Tutorial"
The above is the detailed content of What is pessimistic locking?. For more information, please follow other related articles on the PHP Chinese website!