Table des matières
Test 1 : Tester le verrou exclusif sur la ligne de commande " >Test 1 : Tester le verrou exclusif sur la ligne de commande
Test 2 : Tester le verrouillage exclusif dans la méthode du contrôleur Laravel " >Test 2 : Tester le verrouillage exclusif dans la méthode du contrôleur Laravel
Test 3 : Méthode du contrôleur Laravel et test mixte de ligne de commande, verrouillage exclusif " >Test 3 : Méthode du contrôleur Laravel et test mixte de ligne de commande, verrouillage exclusif
Résumé : Pourquoi lockForUpdate() de laravel n'a-t-il aucun effet ou est-ce qu'après l'exécution de la méthode du contrôleur laravel, la transaction se terminera automatiquement, n'entraîne aucun effet de blocage ? " >Résumé : Pourquoi lockForUpdate() de laravel n'a-t-il aucun effet ou est-ce qu'après l'exécution de la méthode du contrôleur laravel, la transaction se terminera automatiquement, n'entraîne aucun effet de blocage ?
À en juger par cela, le test 3 ci-dessus n'a pas produit d'effet de blocage, qui devrait être provoqué par la fin automatique de la transaction après la fin de la méthode du contrôleur. " > À en juger par cela, le test 3 ci-dessus n'a pas produit d'effet de blocage, qui devrait être provoqué par la fin automatique de la transaction après la fin de la méthode du contrôleur.
Maison cadre php Laravel Analyse des problèmes d'utilisation du verrou exclusif Laravel lockForUpdate()

Analyse des problèmes d'utilisation du verrou exclusif Laravel lockForUpdate()

Jan 08, 2021 pm 01:56 PM
laravel

Vous trouverez ci-dessous

Tutoriel Laravel colonne pour présenter Laravel pour le verrouiller lockforupdate(), j'espère que cela sera utile aux amis qui en ont besoin !

Pour le verrouillage exclusif de MySQL, j'ai fait un test pour voir s'il y a un effet exclusif.

Premier test sur la ligne de commande, ouvrir deux lignes de commande

D'abord sur la commande ligne 1 Ajoutez un verrou exclusif :

laravel 排他锁 lockForUpdate() 使用问题 Puis testez l'accès en ligne de commande 2 :

laravel 排他锁 lockForUpdate() 使用问题 Vous pouvez voir qu'il est effectivement bloqué une fois le commit terminé en ligne de commande. 1, la commande Le résultat de l'exécution est également affiché à la ligne 2.
Il n'y a donc aucun problème à tester les verrous exclusifs à partir de la ligne de commande.

Ce qui suit teste le verrouillage exclusif dans Laravel :

Deux routes :

Route::get('/locktest1','LockController@LockTest1');
Route::get('/locktest2','LockController@LockTest2');Le contenu des deux méthodes
et LockTest1 dans le contrôleur est le même : LockTest2

DB::beginTransaction(); // 开启事务
$goods = Goods::lockForUpdate()->first();
print_r($goods);
Copier après la connexion
accédez d'abord à l'itinéraire

, normal Imprimez les données. Personnellement, je suppose que la transaction n'est pas clôturée pour le moment. S'il y a une autre demande d'accès à la table de données, elle doit être bloquée. /locktest1Donc, lorsque je visite
ici, le résultat est que les données sont imprimées normalement. Pourquoi n'y a-t-il pas d'effet de blocage ? /locktest2

1. Ouvrez d'abord la transaction dans la ligne de commande pour ajouter un. verrouillage exclusif , identique au fonctionnement de la ligne de commande 1 dans le test 1 ;

puis accédez à la route
, la page continue de fonctionner, indiquant que les données de la requête sont bloquées /locktest1 enfin validées dans la ligne de commande ;
2. Accédez d'abord à l'itinéraire
et imprimez les données normalement /locktest1 puis ouvrez la transaction dans la ligne de commande pour ajouter un verrou exclusif. La même opération que la ligne de commande 1 dans le test 1 a révélé que les données. a été interrogé normalement sans blocage ; cela signifie que l'opération de verrouillage exclusif dans la méthode du contrôleur de Laravel n'a pas réussi.

Alors, refaites le test suivant :

Ajoutez une méthode sleep() à la méthode contrôleur de la route 1 :

DB::beginTransaction(); // 开启事务
$goods = Goods::lockForUpdate()->first();
print_r($goods);sleep(10);echo 'ddd';
Copier après la connexion
Ensuite, accédez à la route 1

, La page attend d'être actualisée ; lors de l'accès à nouveau à la route 2 /locktest1, la page attend également d'être actualisée, indiquant que les données sont bloquées, car il n'y a pas de sleep() dans la route 2, et elle est exécutée immédiatement sous des conditions normales. circonstances. /locktest2Après 10 secondes, la page
imprime les données, et la page /locktest1 imprime également les données. /locktest2

Ce qui précède est une analyse personnelle. S'il y a un maître qui passe par là, veuillez laisser un message et dites-moi la bonne réponse !

Pour plus de connaissances liées à la programmation, veuillez visiter :

Enseignement de la programmation ! !

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment obtenir le code de retour lorsque l'envoi par e-mail échoue à Laravel? Comment obtenir le code de retour lorsque l'envoi par e-mail échoue à Laravel? Apr 01, 2025 pm 02:45 PM

Méthode pour obtenir le code de retour lorsque l'envoi par e-mail de Laravel échoue. Lorsque vous utilisez Laravel pour développer des applications, vous rencontrez souvent des situations où vous devez envoyer des codes de vérification. Et en réalité ...

La tâche de calendrier Laravel n'est pas exécutée: que dois-je faire si la tâche n'est pas en cours d'exécution après le calendrier: Exécuter la commande? La tâche de calendrier Laravel n'est pas exécutée: que dois-je faire si la tâche n'est pas en cours d'exécution après le calendrier: Exécuter la commande? Mar 31, 2025 pm 11:24 PM

Laravel Schedule Tâche d'exécution de dépannage non réactif Lorsque vous utilisez la planification des tâches de calendrier de Laravel, de nombreux développeurs rencontreront ce problème: Schedule: Exécuter ...

Dans Laravel, comment gérer la situation où les codes de vérification ne sont pas envoyés par e-mail? Dans Laravel, comment gérer la situation où les codes de vérification ne sont pas envoyés par e-mail? Mar 31, 2025 pm 11:48 PM

La méthode de traitement de l'échec de l'e-mail de Laravel à envoyer le code de vérification est d'utiliser Laravel ...

Comment implémenter la fonction de table personnalisée de clic pour ajouter des données dans l'administrateur DCAT? Comment implémenter la fonction de table personnalisée de clic pour ajouter des données dans l'administrateur DCAT? Apr 01, 2025 am 07:09 AM

Comment implémenter la fonction du tableau de Cliquez sur personnalisé pour ajouter des données dans DCATADMIN (Laravel-Admin) lors de l'utilisation de DCAT ...

Laravel - Serveur de vidage Laravel - Serveur de vidage Aug 27, 2024 am 10:51 AM

Laravel - Dump Server - Le serveur de dump Laravel est livré avec la version de Laravel 5.7. Les versions précédentes n'incluent aucun serveur de dump. Le serveur de vidage sera une dépendance de développement dans le fichier laravel/laravel composer.

Partage de connexion Laravel Redis: pourquoi la méthode de sélection affecte-t-elle d'autres connexions? Partage de connexion Laravel Redis: pourquoi la méthode de sélection affecte-t-elle d'autres connexions? Apr 01, 2025 am 07:45 AM

L'impact du partage des connexions redis dans Laravel Framework et sélectionnez Méthodes Lors de l'utilisation de Laravel Framework et Redis, les développeurs peuvent rencontrer un problème: grâce à la configuration ...

Laravel Multi-Lenant Extension Stancl / Tenancy: Comment personnaliser l'adresse hôte d'une connexion de base de données de locataire? Laravel Multi-Lenant Extension Stancl / Tenancy: Comment personnaliser l'adresse hôte d'une connexion de base de données de locataire? Apr 01, 2025 am 09:09 AM

Connexion de la base de données des locataires personnalisés dans le package d'extension multi-locataire Laravel Stancl / location Lors de la construction d'applications multi-locataires à l'aide du package d'extension multi-locataire Laravel Stancl / location, ...

Laravel – URL de l'action Laravel – URL de l'action Aug 27, 2024 am 10:51 AM

Laravel - URL d'action - Laravel 5.7 introduit une nouvelle fonctionnalité appelée « URL d'action appelable ». Cette fonctionnalité est similaire à celle de Laravel 5.6 qui accepte la méthode string in action. L'objectif principal de la nouvelle syntaxe introduite par Laravel 5.7 est de diriger

See all articles