Table of Contents
1 Basic knowledge
1.1 Shared lock and exclusive lock
1.2 Current Reading and Snapshot Read
2 Optimistic Locking Principle
3 Principle of inventory deduction
Home Database Mysql Tutorial What is the principle of optimistic lock deduction inventory in MySQL?

What is the principle of optimistic lock deduction inventory in MySQL?

Jun 03, 2023 am 09:30 AM
mysql

    1 Basic knowledge

    Deducting inventory in the e-commerce system is a very critical operation. For example, in the flash sale system, overselling must be prevented. , if the merchant sets up 100 pieces of inventory but ends up selling 1,000 pieces, this will cause a financial loss. The following statement is generally used when deducting inventory:

    udpate goods set stock = stock - #{acquire} 
    where sku_id = #{skuId} and stock - #{acquire} >= 0
    Copy after login

    Let us analyze how this statement can effectively prevent inventory oversold in order to protect inventory resources. In the demonstration of this article, we use the MySQL Innodb engine and set the isolation level to repeatable read.

    1.1 Shared lock and exclusive lock

    Shared lock (share Lock) is also called read lock. The statement to implement the shared lock is as follows:

    select lock in share mode
    Copy after login

    Exclusive lock (exclusive Lock) is also called write lock. The statement to implement exclusive lock is as follows:

    select for update
    update
    delete
    insert
    Copy after login

    The compatibility relationship between shared lock and exclusive lock is as follows:

    What is the principle of optimistic lock deduction inventory in MySQL?

    us Analyze the above compatibility relationship through examples. First, create a test table and write the test data:

    CREATE TABLE `test_account` (
      `id` bigint(20) NOT NULL,
      `name` varchar(20) DEFAULT NULL,
      `account` bigint(20) DEFAULT NULL,
      `version` bigint(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    insert  into `test_account`(`id`,`name`,`account`,`version`) values (1,'A',100,1);
    insert  into `test_account`(`id`,`name`,`account`,`version`) values (2,'B',200,1);
    insert  into `test_account`(`id`,`name`,`account`,`version`) values (3,'C',300,1);
    Copy after login

    (1) Read and read compatibility

    Shared lock and shared lock In the following example, session1 can execute the query at time t3 and session2 can obtain the expected results by executing the query at time t4:

    What is the principle of optimistic lock deduction inventory in MySQL?

    (2) Read and write mutual exclusion

    Shared locks and exclusive locks are mutually exclusive. In the following example, session1 adds a shared lock at time t3, and the result can be read correctly, but session2 tries to add an exclusive lock at time t4, but this When the lock is occupied by session1, session2 needs to wait. When session1 does not release the lock for a long time, session2 throws a lock timeout exception:

    What is the principle of optimistic lock deduction inventory in MySQL?

    (3) Write-write interaction Exclusion

    Exclusive locks and exclusive locks are mutually exclusive. In the following example, session1 adds an exclusive lock at time t3, and the result can be read correctly, but session2 tries to add an exclusive lock at time t4. lock, but the lock is occupied by session1 at this time, and session2 needs to wait. When session1 does not release the lock for a long time, session2 throws a lock timeout exception:

    What is the principle of optimistic lock deduction inventory in MySQL?

    1.2 Current Reading and Snapshot Read

    MySQL Innodb storage engine is implemented based on the multi-version concurrency control protocol MVCC. In MVCC concurrency control, read operations can be divided into snapshot reads and current reads.

    Snapshot reading does not require locking. What is read is the visible version of the record, which may be a historical version. Similar to an order snapshot, even if the price of the product changes after the user places the order, the order snapshot remains unchanged. The current read statement is implemented as follows:

    select
    Copy after login

    In order to read the latest version of the record without being modified by other transactions, the current record needs to be locked. The implementation of the current read statement is as follows:

    select lock in share mode
    select for update
    update
    delete
    insert
    Copy after login

    We analyze the snapshot read and current read through an example. Session2 modified the record at t4 and submitted it at t5. Session1 performed a snapshot read at t6 and read this The result was 100 when the transaction started. The current read was performed at t7, and the latest version of the result 101 was read:

    What is the principle of optimistic lock deduction inventory in MySQL?

    What is the current reading process like? We take update as an example to analyze the current reading process:

    What is the principle of optimistic lock deduction inventory in MySQL?

    The first time the program instance issues a current read request, the storage engine returns the first record that satisfies the where condition and locks it. , the program instance then issues an update request, and the storage causes the operation to complete the response successfully. Execute in sequence until all records that satisfy the where condition are executed.

    Here we make some extensions. The RR level provides two mechanisms to avoid phantom reading problems: The first method is snapshot reading, which reads the snapshot when the current transaction is started. One method for current reads is to use the Next-Key Lock mechanism to prevent phantom reads.

    2 Optimistic Locking Principle

    We integrate the above knowledge through a question: There are two threads executing the following statements at the same time. Will the account value of the record id=1 be successful? Deduction twice?

    update test_account set account = account - 100, version = version + 1 
    where id = 1 and version = 1
    Copy after login

    The above statement uses optimistic locking. We know that optimistic locking protects resources, so the answer is not to deduct twice, but we cannot stop there. We need to combine the knowledge in Chapter 1 for further analysis. :

    What is the principle of optimistic lock deduction inventory in MySQL?

    At time t2, session1 and session2 execute update operations at the same time. Since the update will add an exclusive lock, only one of the two can succeed: session1 succeeds, and session2 blocks and waits for the queue to be queued. It locks release.

    At time t3, session1 commits the transaction to release the exclusive lock. At this time, session2 acquires the lock for current reading, but at this time the version value of the record with id=1 has become 2, and the executed statement cannot query the data to be updated, so there is no The record is updated.

    3 Principle of inventory deduction

    If you understand the optimistic locking principle in Chapter 2, then the principle of inventory deduction is already obvious. We assume that there is only 1 item left in stock. If two threads Will oversolding occur if inventory is reduced at the same time?

    What is the principle of optimistic lock deduction inventory in MySQL?

    At t2, session1 and session2 execute updatek to reduce inventory at the same time. Since update will add an exclusive lock, only one of the two can succeed: session1 succeeds, and session2 blocks and waits. Exclusive lock released.

    At time t3, session1 commits the transaction to release the exclusive lock. At this time, session2 acquires the lock for current reading, but at this time, the inventory of product 1 has become 0, which is no longer satisfied (where stock - 1 >= 0) Condition: The execution statement cannot query the data to be updated, so no records are updated.

    The above is the detailed content of What is the principle of optimistic lock deduction inventory in MySQL?. For more information, please follow other related articles on the PHP Chinese website!

    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    Video Face Swap

    Video Face Swap

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

    Hot Article

    Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
    3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
    Nordhold: Fusion System, Explained
    3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

    Hot Tools

    Notepad++7.3.1

    Notepad++7.3.1

    Easy-to-use and free code editor

    SublimeText3 Chinese version

    SublimeText3 Chinese version

    Chinese version, very easy to use

    Zend Studio 13.0.1

    Zend Studio 13.0.1

    Powerful PHP integrated development environment

    Dreamweaver CS6

    Dreamweaver CS6

    Visual web development tools

    SublimeText3 Mac version

    SublimeText3 Mac version

    God-level code editing software (SublimeText3)

    Hot Topics

    Java Tutorial
    1664
    14
    PHP Tutorial
    1269
    29
    C# Tutorial
    1248
    24
    MySQL's Role: Databases in Web Applications MySQL's Role: Databases in Web Applications Apr 17, 2025 am 12:23 AM

    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 Introduction Example Laravel Introduction Example Apr 18, 2025 pm 12:45 PM

    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: Core Features and Functions MySQL and phpMyAdmin: Core Features and Functions Apr 22, 2025 am 12:12 AM

    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.

    MySQL vs. Other Programming Languages: A Comparison MySQL vs. Other Programming Languages: A Comparison Apr 19, 2025 am 12:22 AM

    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.

    Solve database connection problem: a practical case of using minii/db library Solve database connection problem: a practical case of using minii/db library Apr 18, 2025 am 07:09 AM

    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.

    Laravel framework installation method Laravel framework installation method Apr 18, 2025 pm 12:54 PM

    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.

    MySQL for Beginners: Getting Started with Database Management MySQL for Beginners: Getting Started with Database Management Apr 18, 2025 am 12:10 AM

    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

    Solve MySQL mode problem: The experience of using the TheliaMySQLModesChecker module Solve MySQL mode problem: The experience of using the TheliaMySQLModesChecker module Apr 18, 2025 am 08:42 AM

    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.

    See all articles