What is pessimistic locking?
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!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











The main role of MySQL in web applications is to store and manage data. 1.MySQL efficiently processes user information, product catalogs, transaction records and other data. 2. Through SQL query, developers can extract information from the database to generate dynamic content. 3.MySQL works based on the client-server model to ensure acceptable query speed.

Laravel is a PHP framework for easy building of web applications. It provides a range of powerful features including: Installation: Install the Laravel CLI globally with Composer and create applications in the project directory. Routing: Define the relationship between the URL and the handler in routes/web.php. View: Create a view in resources/views to render the application's interface. Database Integration: Provides out-of-the-box integration with databases such as MySQL and uses migration to create and modify tables. Model and Controller: The model represents the database entity and the controller processes HTTP requests.

MySQL and phpMyAdmin are powerful database management tools. 1) MySQL is used to create databases and tables, and to execute DML and SQL queries. 2) phpMyAdmin provides an intuitive interface for database management, table structure management, data operations and user permission management.

Compared with other programming languages, MySQL is mainly used to store and manage data, while other languages such as Python, Java, and C are used for logical processing and application development. MySQL is known for its high performance, scalability and cross-platform support, suitable for data management needs, while other languages have advantages in their respective fields such as data analytics, enterprise applications, and system programming.

I encountered a tricky problem when developing a small application: the need to quickly integrate a lightweight database operation library. After trying multiple libraries, I found that they either have too much functionality or are not very compatible. Eventually, I found minii/db, a simplified version based on Yii2 that solved my problem perfectly.

Article summary: This article provides detailed step-by-step instructions to guide readers on how to easily install the Laravel framework. Laravel is a powerful PHP framework that speeds up the development process of web applications. This tutorial covers the installation process from system requirements to configuring databases and setting up routing. By following these steps, readers can quickly and efficiently lay a solid foundation for their Laravel project.

The basic operations of MySQL include creating databases, tables, and using SQL to perform CRUD operations on data. 1. Create a database: CREATEDATABASEmy_first_db; 2. Create a table: CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY, titleVARCHAR(100)NOTNULL, authorVARCHAR(100)NOTNULL, published_yearINT); 3. Insert data: INSERTINTObooks(title, author, published_year)VA

When developing an e-commerce website using Thelia, I encountered a tricky problem: MySQL mode is not set properly, causing some features to not function properly. After some exploration, I found a module called TheliaMySQLModesChecker, which is able to automatically fix the MySQL pattern required by Thelia, completely solving my troubles.