关于 mysql 锁的疑问
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 等待。当然,也可能遇到以下这两种特殊情况:
请求锁定的类型为 WRITE_DELAYED;
请求锁定的类型为 WRITE_CONCURRENT_INSERT 或者是 TL_WRITE_ALLOW_WRITE ,同时 Current read lock 是 READ_NO_INSERT 的锁定类型。
当遇到这两种特殊情况的时候,写锁定会立即获得而进入Current write-lock queue 中 如果刚开始第一次检测就Current write-lock queue 中已经存在了锁定相同资源的写锁定存在,那 么就只能进入等待队列等待相应资源锁定的释放了。
读请求和写等待队列中的写锁请求的优先级规则主要为以下规则决定:
除了 READ_HIGH_PRIORITY 的读锁定之外,Pending write-lock queue 中的 WRITE 写锁定能够阻 塞所有其他的读锁定;
READ_HIGH_PRIORITY 读锁定的请求能够阻塞所有 Pending write-lock queue 中的写锁定;
除了 WRITE 写锁定之外,Pending write-lock queue 中的其他任何写锁定都比读锁定的优先级 低。 写锁定出现在 Current write-lock queue 之后,会阻塞除了以下情况下的所有其他锁定的请求:
在某些存储引擎的允许下,可以允许一个WRITE_CONCURRENT_INSERT 写锁定请求
写锁定为 WRITE_ALLOW_WRITE 的时候,允许除了 WRITE_ONLY 之外的所有读和写锁定请求
写锁定为 WRITE_ALLOW_READ 的时候,允许除了 READ_NO_INSERT 之外的所有读锁定请求
写锁定为 WRITE_DELAYED 的时候,允许除了 READ_NO_INSERT 之外的所有读锁定请求
写锁定为 WRITE_CONCURRENT_INSERT 的时候,允许除了 READ_NO_INSERT 之外的所有读锁定请求
锁是用来解决多个进程同时处理同一个数据时的竞争问题的。
InnoDB引擎最小的锁粒度是行级锁。当2个请求同时修改某一行纪录时,就会给这个事务上行级锁。
跟用户不用户没啥鸟关系。
锁表是对数据库数据表而言的,表一锁,这个表压根无法访问,就更别讨论哪个用户了

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

L'un des changements majeurs introduits dans MySQL 8.4 (la dernière version LTS en 2024) est que le plugin « MySQL Native Password » n'est plus activé par défaut. De plus, MySQL 9.0 supprime complètement ce plugin. Ce changement affecte PHP et d'autres applications

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

La page est vide après que PHP se connecte à MySQL, et la raison pour laquelle la fonction Die () échoue. Lorsque vous apprenez la connexion entre PHP et la base de données MySQL, vous rencontrez souvent des choses déroutantes ...

CMS signifie Système de gestion de contenu. Il s'agit d'une application logicielle ou d'une plate-forme qui permet aux utilisateurs de créer, gérer et modifier du contenu numérique sans nécessiter de connaissances techniques avancées. Le CMS permet aux utilisateurs de créer et d'organiser facilement du contenu tel que du texte, des images, des vidéos et des documents, et de le publier sur des sites Web ou d'autres plateformes numériques.
