-
locker sa table
bonjour
voila, j essaye de locker ma table, et j ai une methode qui me dit comment faire :
"dans les cas où vous voulez faire de nombreuses INSERT et SELECT sur la même table, vous pouvez insérer les lignes dans une table temporaire, et ne modifier la table réelle que de temps en temps, à partir de la table temporaire.
"
et donc faire ceci
mysql> LOCK TABLES real_table WRITE, insert_table WRITE;
mysql> INSERT INTO real_table SELECT * FROM insert_table;
mysql> TRUNCATE TABLE insert_table;
mysql> UNLOCK TABLES;
mais bon, voila, en gros noob de mysql, je pose tout de meme ma question :
quand faut il faire ca dans mon code? a chaque insert? au debut de chaque page? a chaque update? a la creation de la bdd?
help me siouplais !!!
-
Normalement tu n'as besoin de le faire dans ces conditions là surtout que cela ne sert à rien.
Mysql gère le lock de table de manière automatique. Cela dépend du moteur utilisé mais MyISAM c'est fait automatiquement, je ne suis pas sur mais je confonds avec le moteur InnoDB.
Par contre, je te déconseille de te lancer dans la gestion de lock de table ainsi. Il faut l'utiliser dans des cas très spécifiques qui peuvent critique.
Exemple quelqu'un fasse une gestion de caddie. La table peut être locké sur les commandes pour la disponibilité du produit.
Vous imaginez s'il restait qu'un produit et que deux personnes possèdent ce produit dans leurs panier. Au moment de la commande il faut pouvoir verrouiller la table des disponibilités le temps du traitement SQL. Si pendant le processe de validation l'autre utilisateur passe commande. Il n'aura pas accès à la table, il va attendre qu'elle soit dévérouillé. Par la suite la commande va être annulé parqu'au final le produit n'est plus disponible.
Bref, c'est utile dans ce genre de scénario très sensible.
-
merci!
donc j ai cas passer de MyISAM -> InnoDB et c est tout?
c est pour un jeu en ligne.
donc si 50 utilisateurs en meme temps touchent a la table membre, il faut un lock non?
-
Non, ne change pas de moteur pour ça. Il me semble et je suis plus sur mais InnoDB gère le lock de table.
-
ok, merci donc je passe en InnoDB de suite
a plus!