2009-11-13 5 views
3

En utilisant mysqli de PHP, comment appliquez-vous un verrou de niveau ligne?mySQL - Appliquer un verrou de niveau ligne en utilisant mysqli

Les verrous au niveau des lignes empêchent toute modification des lignes actuellement présentes qui correspondent à vos critères? mais arrêtent-ils un utilisateur en insérant une ligne qui correspond à vos critères?

Merci

Répondre

7

Si vous souhaitez interdire l'édition d'une ligne spécifique, utilisez FOR UPDATE à la fin d'une requête SELECT. Cela verrouille la ligne de votre transaction et empêche les autres utilisateurs de la mettre à jour. Cela ne fonctionne que dans les moteurs de stockage transactionnels comme innodb.

En réponse à vos questions, oui, les verrous au niveau de la ligne «Arrêtez toute modification des lignes actuellement présentes correspondant à vos critères». Plus précisément, si (dans une transaction) vous INSERT, UPDATE ou DELETE une ligne, cette ligne est verrouillée par n'importe qui d'autre jusqu'à ce que votre COMMIT votre transaction. Si vous sélectionnez une ligne en utilisant FOR UPDATE, cela verrouille également la ligne. Toutefois, cela n'empêche pas un utilisateur d'insérer une ligne correspondant à vos critères.

+0

Il convient de souligner que le verrouillage au niveau des lignes n'est disponible que dans InnoDB et non dans MyISAM. –

+0

Ah, juste vu l'étiquette innodb sur ce :) –

+0

IF Row est verrouillé est-il possible de sélectionner des données de cette ligne? Par exemple, si la ligne est verrouillée, puis-je récupérer les données par 'fetch_object()'? – TarangP

0

Qu'est-ce que vous essayez d'atteindre? Le moteur InnoDB utilise row level locking mais il s'agit d'un processus MySQL interne automatique.

Questions connexes