Table of Contents
Lock
Classification of locks
Row-level locks
Table-level lock
Page-level lock
Mysql common storage engine locking mechanism
InnoDB row locks and table locks
Row-level locks and deadlocks
Avoid deadlock
Shared locks and exclusive locks
1. Shared lock
2. Exclusive lock
3. Intention lock
Summary
Home Database Mysql Tutorial Introduction to mysql database lock mechanism

Introduction to mysql database lock mechanism

Feb 01, 2019 am 10:20 AM
mysql

This article brings you an introduction to the MySQL database lock mechanism. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

Concurrency control

  • The task of concurrency control in the database management system is to ensure that multiple transactions do not access the same data in the database at the same time. Destroy the isolation and unity of transactions and the unity of the database.

  • Blocking, timestamp, optimistic concurrency control and pessimistic concurrency control are the main technical means used for concurrency control

Lock

When concurrent transactions access a resource at the same time, it may lead to data inconsistency, so a mechanism is needed to sequence data access to ensure the consistency of database data. Lock is one of the mechanisms (recommended tutorial: MySQL tutorial)

Classification of locks

  • Divided according to operations, it can be divided intoDML lock, DDL lock

  • Divided according to lock granularity, it can be divided into table-level lock, row-level lock, page-level lock (mysql)

  • Divided according to the lock level, it can be divided into Shared lock and exclusive lock

  • Divided according to the locking method, it can be divided into It is automatic lock, display lock

  • is divided according to the usage method, and can be divided into optimistic lock and pessimistic lock

DML locks are used to protect the integrity of data, including row-level locks (TX locks) and table-level locks (TM locks). DDL locks are used to protect the structure of database objects, such as the structure definition of tables, indexes, etc., including exclusive DDL locks, shared DDL locks, and interruptible parsing locks

Row-level locks

  • Row-level lock is the most detailed lock in Mysql, which means that only the row currently operated is locked. Row-level locks can greatly reduce conflicts in database operations. Its locking granularity is the smallest, but the locking overhead is also the largest. Row-level locks are divided into shared locks and exclusive locks

  • Features: high overhead, slow locking; deadlocks may occur; locking granularity The smallest, the lowest probability of lock conflict, and the highest degree of concurrency

Table-level lock

  • Table-level lock is the largest locking granularity in Mysql A kind of lock means locking the entire table of the current operation. It is simple to implement, consumes less resources, and is supported by most Mysql engines. The most commonly used MYISAM and INNODB support table-level locking. Table-level locking is divided into table shared read lock (shared lock) and table exclusive write lock (exclusive lock)

  • Features: low overhead , locking is fast; no deadlock will occur; the locking granularity is large, the probability of issuing lock conflicts is the highest, and the concurrency is the lowest

Page-level lock

  • Page-level lock is a kind of lock in Mysql whose locking granularity is between row-level lock and table-level lock. Table-level locks are fast but have many conflicts. Row-level locks have few conflicts but are slow. Page-level locking compromises to lock an adjacent group of records. BDB supports page-level locks

Mysql common storage engine locking mechanism

  • MyISAM and MEMORY use table-level locks

  • BDB uses page-level locks or table-level locks. The default is page-level locks.

  • InnoDB supports row-level locks and table-level locks. The default is row-level locks

InnoDB row locks and table locks

The InnoDB engine supports both row locks and table locks. So when will the entire table be locked, and when will a row be locked? ?

  • InnoDB row locking is achieved by locking the index entries on the index. This is different from Mysql and Oracle, which locks the corresponding data rows in the data block. realized. This row lock implementation feature of InnoDB means: Only when data is retrieved through index conditions, InnoDB uses row-level locks, otherwise InnoDb will use table locks

  • Practical application , we should pay attention to this feature of InnoDB row lock, otherwise it will easily lead to a large number of lock conflicts, thus affecting the concurrency performance

    • When querying without index conditions, InnoDB uses It's a table lock, not a row lock

    • Since MySQL's row lock is a lock for the index, not a lock for the record, although records of different rows are accessed, if Using keys of the same index will cause lock conflicts.

    • When a table has multiple indexes, different transactions can use different indexes to lock different rows. In addition, whether a primary key index, a unique index or a normal index is used, InnoDB will use Row lock to lock the data

    • Even if the index field is used in the condition, whether to use the index to retrieve the data is determined by Mysql by judging the cost of different row plans. If MySQL thinks that a full table scan is more efficient, such as for some very small tables, it will not use indexes. In this case, InnoDB will use table locks instead of row locks. Therefore, when analyzing lock conflicts, don’t forget to check the SQL execution plan

Row-level locks and deadlocks

  • MyISAM will not produce deadlocks, because MyISAM always gets everything it needs at once Lock, either all satisfied or all waiting. In InnoDB, locks are acquired gradually, resulting in the possibility of deadlock

  • In MySQL, row-level locks do not directly lock records, but lock indexes. Indexes are divided into primary key indexes and non-primary key indexes. If a SQL statement operates on the primary key index, MySQL will lock the primary key index; if a statement operates on a non-primary key index, MySQL will first lock the non-primary key index. Then lock the relevant primary key index. During Update and delete operations, MySQL not only locks all index records scanned by the where condition, but also locks adjacent key values, which is the so-called next-key locking

  • Deadlock: When two transactions are executed at the same time, one locks the primary key index and is waiting for other related indexes. The other locks the non-primary key index and is waiting for the primary key index. A deadlock occurs.

  • After a deadlock occurs, InnoDB can generally detect it and make one transaction release the lock and roll back, and another acquire the lock to complete the transaction

Avoid deadlock

  • If different programs access multiple tables concurrently, try to agree to access the tables in the same order, which can greatly reduce the chance of deadlock

  • In the same transaction, try to lock all the resources required at once to reduce the probability of deadlock

  • For business parts that are very prone to deadlock, you can Try to use upgraded locking granularity to reduce deadlocks through table-level locking

Shared locks and exclusive locks

  • Row-level locks are in MySQL The finest lock granularity, row-level locks can greatly reduce conflicts in database operations. Row-level locks are divided into shared locks and exclusive locks

1. Shared lock
  • Shared lock is also calledread lock , is the lock created by the read operation. Other users can read the data concurrently, but no transaction can modify the data until all shared locks have been released.

  • If transaction T adds a shared lock to data A, other transactions can only add shared locks to A and cannot add exclusive locks. Transactions that are granted shared locks can only read data and cannot modify data

  • If transaction T adds a shared lock to data A and then modifies the data, other transactions will not be able to obtain the share Lock; similarly, if multiple transactions acquire shared locks on the same data, no transaction can modify the data

  • Usage: SSELECT ... LOCK IN SHARE MODE

    Add LOCK IN SHARE MODE after the query statement. Mysql will add a shared lock to each row in the query result. When no other threads focus on the query result When any row uses an exclusive lock, it can successfully apply for a shared lock, otherwise it will be blocked. Other threads can also read tables using shared locks, and these threads read the same version of data

2. Exclusive lock
  • Exclusive lock is also called write lock. If transaction T adds an exclusive lock to data A, other transactions cannot add any type of blockade to A. A transaction that acquires an exclusive lock can both read and modify data

  • Usage: SELECT ... FOR UPDATE. Add FOR UPDATE after the query statement, and MySQL will add an exclusive lock to each row in the query result. When no other thread uses an exclusive lock on any row of the query result set, the exclusive lock can be successfully applied for. Otherwise it will be blocked

3. Intention lock
  • Intention lock is a table-level lock, which is designed to reveal the following in a transaction The type of lock that will be requested for a row. Two table locks in InnoDB:

    • Intention Shared Lock (IS): Indicates that the transaction is preparing to add a shared lock to the data row, that is to say, a shared lock is added to a data row The IS lock of the table must be obtained before

    • Intentional exclusive lock (IX): Indicates that the transaction is preparing to add an exclusive lock to the data row, indicating that the transaction must first add an exclusive lock to a data row. The IX lock of the table is removed

  • The intention lock is automatically added by InnoDB and does not require user intervention

Summary

For insert, update, delete, InnoDB will automatically add exclusive locks to the data involved; For general Select statements, InnoDB will not add any locks, and transactions can be explicitly added through the following statements Shared lock or exclusive lock

  • Shared lock: select ... LOCK IN SHARE MODE

  • Exclusive lock: SELECT ... FOR UPDATE

The above is the detailed content of Introduction to mysql database lock mechanism. 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 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)

How to open phpmyadmin How to open phpmyadmin Apr 10, 2025 pm 10:51 PM

You can open phpMyAdmin through the following steps: 1. Log in to the website control panel; 2. Find and click the phpMyAdmin icon; 3. Enter MySQL credentials; 4. Click "Login".

MySQL: An Introduction to the World's Most Popular Database MySQL: An Introduction to the World's Most Popular Database Apr 12, 2025 am 12:18 AM

MySQL is an open source relational database management system, mainly used to store and retrieve data quickly and reliably. Its working principle includes client requests, query resolution, execution of queries and return results. Examples of usage include creating tables, inserting and querying data, and advanced features such as JOIN operations. Common errors involve SQL syntax, data types, and permissions, and optimization suggestions include the use of indexes, optimized queries, and partitioning of tables.

How to use single threaded redis How to use single threaded redis Apr 10, 2025 pm 07:12 PM

Redis uses a single threaded architecture to provide high performance, simplicity, and consistency. It utilizes I/O multiplexing, event loops, non-blocking I/O, and shared memory to improve concurrency, but with limitations of concurrency limitations, single point of failure, and unsuitable for write-intensive workloads.

MySQL's Place: Databases and Programming MySQL's Place: Databases and Programming Apr 13, 2025 am 12:18 AM

MySQL's position in databases and programming is very important. It is an open source relational database management system that is widely used in various application scenarios. 1) MySQL provides efficient data storage, organization and retrieval functions, supporting Web, mobile and enterprise-level systems. 2) It uses a client-server architecture, supports multiple storage engines and index optimization. 3) Basic usages include creating tables and inserting data, and advanced usages involve multi-table JOINs and complex queries. 4) Frequently asked questions such as SQL syntax errors and performance issues can be debugged through the EXPLAIN command and slow query log. 5) Performance optimization methods include rational use of indexes, optimized query and use of caches. Best practices include using transactions and PreparedStatemen

Why Use MySQL? Benefits and Advantages Why Use MySQL? Benefits and Advantages Apr 12, 2025 am 12:17 AM

MySQL is chosen for its performance, reliability, ease of use, and community support. 1.MySQL provides efficient data storage and retrieval functions, supporting multiple data types and advanced query operations. 2. Adopt client-server architecture and multiple storage engines to support transaction and query optimization. 3. Easy to use, supports a variety of operating systems and programming languages. 4. Have strong community support and provide rich resources and solutions.

Monitor Redis Droplet with Redis Exporter Service Monitor Redis Droplet with Redis Exporter Service Apr 10, 2025 pm 01:36 PM

Effective monitoring of Redis databases is critical to maintaining optimal performance, identifying potential bottlenecks, and ensuring overall system reliability. Redis Exporter Service is a powerful utility designed to monitor Redis databases using Prometheus. This tutorial will guide you through the complete setup and configuration of Redis Exporter Service, ensuring you seamlessly build monitoring solutions. By studying this tutorial, you will achieve fully operational monitoring settings

How to view sql database error How to view sql database error Apr 10, 2025 pm 12:09 PM

The methods for viewing SQL database errors are: 1. View error messages directly; 2. Use SHOW ERRORS and SHOW WARNINGS commands; 3. Access the error log; 4. Use error codes to find the cause of the error; 5. Check the database connection and query syntax; 6. Use debugging tools.

How to connect to the database of apache How to connect to the database of apache Apr 13, 2025 pm 01:03 PM

Apache connects to a database requires the following steps: Install the database driver. Configure the web.xml file to create a connection pool. Create a JDBC data source and specify the connection settings. Use the JDBC API to access the database from Java code, including getting connections, creating statements, binding parameters, executing queries or updates, and processing results.

See all articles