Est-ce que TRANSACTION ISOLATION LEVEL SERIALIZABLE crée un verrou READ

Je n'arrive pas à find une réponse directe à ce qui devrait être une question simple. Si je crée une transaction dans T-SQL et définissez ISOLATION LEVEL sur SERIALIZABLE, cela crée-t-il un verrou READ sur les tables que je modifie?

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; GO BEGIN TRANSACTION; GO TRUNCATE TABLE TBL_PRODUCTS; GO **INSERT RECORDS HERE** GO COMMIT TRANSACTION; GO 

TRUNCATE TABLE va acquérir un verrou de modification shema exclusif sur la table empêchant tous les users de lire depuis la table (à less qu'ils n'utilisent TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ou WITH(NOLOCK) ) et écrivent dans la table (aucune exception pour l'écriture). Le verrou exclusif sera publié à COMMIT TRANSACTION .

EDIT: Comme Martin Smith l'a souligné dans son commentaire ci-dessous, la table truncate va acquérir un verrou de modification de schéma. Autrement dit, aucun autre user ne pourra lire ou modifier la table jusqu'à ce qu'une validation ou une annulation ait eu lieu.

Oui, il verrouillera la table, et voici les règles pour sérialisable:

  • Les instructions ne peuvent pas lire datatables qui ont été modifiées mais pas encore validées par d'autres transactions.
  • Aucune autre transaction ne peut modifier datatables qui ont été lues par la transaction en cours tant que la transaction en cours n'est pas terminée.
  • Les autres transactions ne peuvent pas insert de nouvelles lignes avec des valeurs de key qui tomberaient dans la plage de keys lues par les instructions de la transaction en cours jusqu'à la fin de la transaction en cours.

https://msdn.microsoft.com/en-us/library/ms173763.aspx