Laravel fournit un moyen pratique et rapide d'utiliser les transactions de base de données. J'ai rencontré plusieurs endroits qui sont facilement confus et induits en erreur lors de l'utilisation. Je vais faire un enregistrement ici et j'espère que certains experts pourront indiquer où je me trompe
.Les transactions Laravel sont divisées en méthodes manuelles et automatiques, mais si nous utilisons la méthode de table de verrouillage sharedLock ou lockForUpdate fournie par laravel, afin d'éviter des problèmes et des erreurs inutiles, il est recommandé d'utiliser la soumission manuelle des transactions, comme indiqué ci-dessous :
Parlons des différences et des impacts de sharedLock (verrouillage partagé) et lockForUpdate (verrouillage pessimiste)
sharedLock (verrou partagé)
sharedLock est équivalent à l'instruction SQL *sélectionnez dans transaction_test où type = 1 verrou en mode partage ;**
dans une transaction Cela prendra effet uniquement lorsque sharedLock est utilisé et que la ligne où se trouvent les données sera verrouillée. À ce stade, les données verrouillées ne peuvent pas être modifiées par d'autres opérations, mais les données verrouillées n'ont aucun impact sur l'opération de requête, qu'elle soit ou non. une requête normale ou une requête dans une opération de transaction ne sera pas affectée. Les données verrouillées ne seront pas libérées tant que la transaction n'est pas validée ou annulée.
lockForUpdate (verrouillage pessimiste)
lockForUpdate est équivalent à l'instruction SQL *select lorsqu'elle est utilisée from transaction_test which type = 1 for update;**
lockForUpdate ne prendra effet que dans une transaction. Lors de l'utilisation de lockForUpdate, la ligne où se trouvent les données est verrouillée à ce moment-là, verrouille les opérations de table dans d'autres transactions. attendra que la transaction en cours soit soumise. Exécution, mais il n'y a aucune restriction sur les tables non verrouillables et les opérations de requête ordinaires. Ce qui est affecté, ce sont uniquement les opérations de table verrouillables que vous effectuez également dans la transaction.
Dans. Bref, qu'il s'agisse d'un verrou partagé ou d'un verrou pessimiste, seule l'opération de verrouillage de table effectuée dans la transaction n'a aucun impact sur les opérations de requête ordinaires et les opérations de table non verrouillables dans la transaction
En même temps. À ce moment-là, il convient de noter qu'il s'agit d'un verrouillage pessimiste ou d'un verrouillage partagé, lorsque l'instruction SQL implique l'index et utilise l'index comme base de requête ou de jugement, alors mysql utilisera des verrous au niveau de la ligne pour verrouiller les lignes à modifier, sinon, il utilisera des verrous de table pour verrouiller la table entière, vous devez donc faire attention à l'utilisation de l'index lorsque vous l'utilisez, sinon cela entraînera des problèmes de concurrence élevés ;
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!