Mysql
 sql >> Base de données >  >> RDS >> Mysql

SELECT FOR UPDATE contenant toute la table dans MySQL plutôt que ligne par ligne

Le niveau d'isolement par défaut pour les tables InnoDB est la lecture répétable. Lorsque ce niveau d'isolement est actif, nous obtenons le comportement suivant (citation de :https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):

En d'autres termes :pourriez-vous essayer d'utiliser la clé primaire dans la condition WHERE du SELECT ? Ainsi par exemple au lieu de :

START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;

Essayez :

START TRANSACTION;
SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;

dans le cas où id est la clé primaire. Toute autre colonne avec un index unique fonctionnerait également. Lorsque vous utilisez des colonnes non uniques dans votre clause WHERE, InnoDB verrouille une plage de lignes.