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

accès simultané à la base de données MySQL à l'aide d'une procédure stockée

Tout d'abord, comme indiqué dans un autre article, utilisez InnoDB. C'est le moteur de stockage par défaut depuis MySQL 5.5 et il est plus robuste.

Deuxièmement, regardez cette page :http:// dev.mysql.com/doc/refman/5.5/en/innodb-locking-reads.html

Vous devez utiliser un SELECT ... FOR UPDATE pour empêcher les autres connexions de lire la ligne que vous êtes sur le point de mettre à jour tant que votre transaction n'est pas terminée :

START TRANSACTION;

SELECT value INTO @value
FROM mytable
WHERE id = 5
FOR UPDATE;

UPDATE mytable
SET value = value + 1
WHERE id = 5;

COMMIT;

C'est mieux que de verrouiller la table car InnoDB effectue des verrous au niveau des lignes. La transaction ci-dessus ne verrouillerait que les lignes où id =5... donc une autre requête fonctionnant avec id =10 ne serait pas bloquée par cette requête.