Maison > base de données > tutoriel mysql > le corps du texte

Dans quelles circonstances mysql se bloquera-t-il ?

(*-*)浩
Libérer: 2019-05-11 09:35:59
original
3861 Les gens l'ont consulté

Deadlock dans mysql : fait référence à un phénomène où deux ou plusieurs processus s'attendent en raison d'une concurrence pour les ressources lors de l'exécution, sans force externe. on dit que le système est dans un état de blocage ou que le système est dans une impasse. Ces processus qui s'attendent toujours les uns les autres sont appelés processus de blocage. Les verrous au niveau de la table ne provoqueront pas de blocages. Par conséquent, la résolution des blocages se concentre principalement sur InnoDB le plus couramment utilisé.

Cours recommandé : Tutoriel MySQL.

Dans quelles circonstances mysql se bloquera-t-il ?

La clé de l'impasse est que l'ordre dans lequel deux (ou plus) sessions sont verrouillées est incohérent.

Ensuite, la clé correspondante pour résoudre le problème de blocage est : verrouiller différentes sessions dans l'ordre

Cas

Exigence : Investir l'argent Divisé en plusieurs tranches et distribués au hasard aux emprunteurs.

L'idée initiale du processus commercial est la suivante :

Une fois que l'investisseur a investi, le montant est divisé au hasard en plusieurs parties, puis quelques-unes sont sélectionné au hasard dans la liste des emprunteurs, utilisez ensuite select for update pour mettre à jour le solde dans la table des emprunteurs, etc.

Par exemple, si deux utilisateurs investissent en même temps, le montant de l'utilisateur A est divisé aléatoirement en 2 parties, et est distribué à l'emprunteur 1, 2

Le montant de l'utilisateur B est divisé aléatoirement en 2 parties Attribué à l'emprunteur 2, 1

L'ordre de verrouillage étant différent, une impasse apparaîtra bien sûr rapidement.

L'amélioration de ce problème est très simple, il suffit de verrouiller tous les emprunteurs attribués en même temps.

Sélectionnez * à partir de xxx où l'identifiant dans (xx,xx,xx) pour la mise à jour

La valeur de la liste dans MySQL sera automatiquement triée de petit à grand, ajoutez Le les serrures sont aussi une série de serrures de petite à grande

 例如(以下会话id为主键):
 
Session1:
 
mysql> select * from t3 where id in (8,9) for update;
+----+--------+------+---------------------+
| id | course | name | ctime               |
+----+--------+------+---------------------+
|  8 | WA     | f    | 2016-03-02 11:36:30 |
|  9 | JX     | f    | 2016-03-01 11:36:30 |
+----+--------+------+---------------------+
rows in set (0.04 sec)
 
 
Session2:
select * from t3 where id in (10,8,5) for update;
锁等待中……
 
其实这个时候id=10这条记录没有被锁住的,但id=5的记录已经被锁住了,锁的等待在id=8的这里
不信请看
 
Session3:
mysql> select * from t3 where id=5 for update;
锁等待中
 
 
Session4:
mysql> select * from t3 where id=10 for update;
+----+--------+------+---------------------+
| id | course | name | ctime               |
+----+--------+------+---------------------+
| 10 | JB     | g    | 2016-03-10 11:45:05 |
+----+--------+------+---------------------+
row in set (0.00 sec)
 
 
在其它session中id=5是加不了锁的,但是id=10是可以加上锁的。
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!