2012-11-15 1 views
2

J'ai une question sur le contrôle de la concurrence et quand vous inquiéter à ce sujet. J'ai créé un site PHP/MySQL (InnoDB). Je sais comment éviter les problèmes de transaction, mais il y a aussi le contrôle de la concurrence.Quand se préoccuper du contrôle de la concurrence PHP mysql

Mon site est un E-commerce qui contient des marchandises insérées par l'utilisateur, par exemple. Lorsqu'un utilisateur insère un nouvel élément sur le site, le DB crée un ID de produit en tant que clé primaire (incrémenté automatiquement par la base de données) et stocke les autres données relatives à ce produit qui sont soumises via un formulaire. J'utilise des déclarations préparées.

Dois-je m'inquiéter si deux utilisateurs ou plus le font exactement au même moment? Y a-t-il une chance que la soumission de deux ou plusieurs éléments en même temps gâchera les données des différentes lignes?

Pour pouvoir insérer des produits, l'utilisateur doit être connecté en utilisant des sessions si cela est important pour la question.

Merci d'avance, Markus.

+3

no. un identifiant auto_increment est garanti unique, quel que soit le nombre d'insertions en parallèle effectuées. Les identifiants créés dans les transactions qui sont annulées ne seront plus jamais réutilisés. –

+0

Aha, c'est bon à savoir. Merci pour la réponse. – Markus

Répondre

3

Sauf s'ils écrivent sur la même ligne, je ne vois pas pourquoi vous auriez des problèmes de simultanéité. Même s'ils écrivaient sur la même ligne, InnoDB a au niveau de la ligne, ce qui signifie qu'une ligne sera verrouillée jusqu'à ce qu'un utilisateur ait fini d'écrire dessus, laissant les utilisateurs suivants "attendre" jusqu'à la fermeture est sorti. En ce qui concerne la possibilité de "requêtes INSERT en conflit": Si vous insérez de nouvelles données dans une table qui utilise une clé primaire auto-incrémentée, vous êtes assuré d'obtenir un identifiant unique à chaque fois, ce qui signifie que la concurrence ne devrait jamais être un problème sur INSERT.

+0

Je vois, merci pour la réponse. – Markus

2

Vous pouvez effectuer un verrouillage rapide de la table particulièrement utile lors des mises à jour

Questions connexes