Table of Contents
回复内容:
Home Backend Development PHP Tutorial 关于 mysql 锁的疑问

关于 mysql 锁的疑问

Jun 06, 2016 pm 08:07 PM
mysql php database

mysql 数据库,表的概念是对用户而言的么?用户A锁了某个表,用户B就会受锁影响,是这样么?
如果是,在一个网站站中,操作数据库都是同一个用户,这时候锁还起作用吗?
如果不是,又应该怎么理解?

回复内容:

mysql 数据库,表的概念是对用户而言的么?用户A锁了某个表,用户B就会受锁影响,是这样么?
如果是,在一个网站站中,操作数据库都是同一个用户,这时候锁还起作用吗?
如果不是,又应该怎么理解?

锁定是针对请求而言的。
MySQL表锁定分为读锁定和写锁定,主要通过四个队列来维护:两个存放正在锁定中的读写锁定信息,两个存放等待中的读写锁定信息。

如下: • Current read-lock queue (lock->read) • Pending read-lock queue
(lock->read_wait) • Current write-lock queue (lock->write) • Pending
write-lock queue (lock->write_wait) 当前持有读锁的所有线程的相关信息都能够在 Current
read-lock queue 中找到,队列中的信息按 照获取到锁的时间依序存放。而正在等待锁定资源的信息则存放在 Pending
read-lock queue 里面,另 外两个存放写锁信息的队列也按照上面相同规则来存放信息。

读锁定 一个新的客户端请求在申请获取读锁定资源的时候,需要满足两个条件: 1、 请求锁定的资源当前没有被写锁定;
2、写锁定等待队列(Pending write-lock queue)中没有更高优先级的写锁定等待;
如果满足了上面两个条件之后,该请求会被立即通过,并将相关的信息存入 Current read-lock queue
中,而如果上面两个条件中任何一个没有满足,都会被迫进入等待队列Pending read-lock queue 中等待资源的释放。 写锁定
当客户端请求写锁定的时候,MySQL 首先检查在 Current write-lock queue 是否已经有锁定相同资 源的信息存在。
如果 Current write-lock queue 没有,则再检查 Pending write-lock queue,如果在
Pending write-lock queue 中找到了,自己也需要进入等待队列并暂停自身线程等待锁定资源。反之,如果 Pending
write-lock queue 为空,则再检测 Current read-lock queue,如果有锁定存在,则同样需要 进入
Pending write-lock queue 等待。当然,也可能遇到以下这两种特殊情况:

  1. 请求锁定的类型为 WRITE_DELAYED;

  2. 请求锁定的类型为 WRITE_CONCURRENT_INSERT 或者是 TL_WRITE_ALLOW_WRITE ,同时 Current read lock 是 READ_NO_INSERT 的锁定类型。
    当遇到这两种特殊情况的时候,写锁定会立即获得而进入Current write-lock queue 中 如果刚开始第一次检测就

Current write-lock queue 中已经存在了锁定相同资源的写锁定存在,那 么就只能进入等待队列等待相应资源锁定的释放了。
读请求和写等待队列中的写锁请求的优先级规则主要为以下规则决定:

  1. 除了 READ_HIGH_PRIORITY 的读锁定之外,Pending write-lock queue 中的 WRITE 写锁定能够阻 塞所有其他的读锁定;

  2. READ_HIGH_PRIORITY 读锁定的请求能够阻塞所有 Pending write-lock queue 中的写锁定;

  3. 除了 WRITE 写锁定之外,Pending write-lock queue 中的其他任何写锁定都比读锁定的优先级 低。 写锁定出现在 Current write-lock queue 之后,会阻塞除了以下情况下的所有其他锁定的请求:

  4. 在某些存储引擎的允许下,可以允许一个WRITE_CONCURRENT_INSERT 写锁定请求

  5. 写锁定为 WRITE_ALLOW_WRITE 的时候,允许除了 WRITE_ONLY 之外的所有读和写锁定请求

  6. 写锁定为 WRITE_ALLOW_READ 的时候,允许除了 READ_NO_INSERT 之外的所有读锁定请求

  7. 写锁定为 WRITE_DELAYED 的时候,允许除了 READ_NO_INSERT 之外的所有读锁定请求

  8. 写锁定为 WRITE_CONCURRENT_INSERT 的时候,允许除了 READ_NO_INSERT 之外的所有读锁定请求

锁是用来解决多个进程同时处理同一个数据时的竞争问题的。

InnoDB引擎最小的锁粒度是行级锁。当2个请求同时修改某一行纪录时,就会给这个事务上行级锁。

跟用户不用户没啥鸟关系。

锁表是对数据库数据表而言的,表一锁,这个表压根无法访问,就更别讨论哪个用户了

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)

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.

PHP and Python: Comparing Two Popular Programming Languages PHP and Python: Comparing Two Popular Programming Languages Apr 14, 2025 am 12:13 AM

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

PHP's Current Status: A Look at Web Development Trends PHP's Current Status: A Look at Web Development Trends Apr 13, 2025 am 12:20 AM

PHP remains important in modern web development, especially in content management and e-commerce platforms. 1) PHP has a rich ecosystem and strong framework support, such as Laravel and Symfony. 2) Performance optimization can be achieved through OPcache and Nginx. 3) PHP8.0 introduces JIT compiler to improve performance. 4) Cloud-native applications are deployed through Docker and Kubernetes to improve flexibility and scalability.

PHP: The Foundation of Many Websites PHP: The Foundation of Many Websites Apr 13, 2025 am 12:07 AM

The reasons why PHP is the preferred technology stack for many websites include its ease of use, strong community support, and widespread use. 1) Easy to learn and use, suitable for beginners. 2) Have a huge developer community and rich resources. 3) Widely used in WordPress, Drupal and other platforms. 4) Integrate tightly with web servers to simplify development deployment.

PHP: A Key Language for Web Development PHP: A Key Language for Web Development Apr 13, 2025 am 12:08 AM

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

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

The Enduring Relevance of PHP: Is It Still Alive? The Enduring Relevance of PHP: Is It Still Alive? Apr 14, 2025 am 12:12 AM

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.

PHP vs. Python: Core Features and Functionality PHP vs. Python: Core Features and Functionality Apr 13, 2025 am 12:16 AM

PHP and Python each have their own advantages and are suitable for different scenarios. 1.PHP is suitable for web development and provides built-in web servers and rich function libraries. 2. Python is suitable for data science and machine learning, with concise syntax and a powerful standard library. When choosing, it should be decided based on project requirements.

See all articles