2009-01-18 5 views
2

J'ai lu plusieurs fois que MySQL effectuera des verrous de niveau table sur les tables MyISAM pendant les insertions. C'est correct avec moi si ce verrou est utilisé pour la sérialisation des commandes d'insertion/suppression seulement. Les insertions sont très rares sur mon site de toute façon. Mais ce verrouillage bloquera-t-il toutes les requêtes Select jusqu'à la fin de la commande d'insertion?Qu'est-ce que les verrous de verrouillage au niveau de la table lors des insertions dans MySQL?

Répondre

2

Un verrou d'écriture bloque toutes les sélections qui utilisent les tables que vous avez verrouillé.

+0

une insertion d'un nouvel enregistrement sur myisam (à la fin de la table) ne verrouille pas toute la table. –

+0

Oui, c'est le cas, s'il n'y a pas de trous dans le fichier de données (par exemple, pas de suppression depuis le dernier optimiser). http://dev.mysql.com/doc/refman/5.0/en/concurrent-inserts.html décrit le comportement en détail. – derobert

0

Pour accomplir les niveaux d'isolement dans le serveur MySQL, vous pouvez changer le mode d'isolation de session en utilisant la commande SET SESSION. L'instruction ci-dessus fonctionnera comme WITH (nolock), c'est-à-dire READ UNCOMMITTED data. Vous pouvez également définir le niveau d'isolation globalement pour toutes les connexions.

SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ; 

Il existe deux variables système liées au niveau d'isolement dans le serveur MySQL. La première instruction renvoie le niveau d'isolement global, la seconde renvoie uniquement la session en cours.

Dans SQL Server, vous pouvez également définir le niveau d'isolation au niveau de la transaction comme ceci.

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ 
GO 

Reade plus @:

+4

Il utilise MyISAM, ce qui n'est pas transactionnel. Donc ça ne marchera pas du tout. – derobert

Questions connexes