Bonjour,
Je suis loin d'être un spécialiste SQL et il y a un scénario de lock que je n'arrive pas à comprendre dans SQL Server 2008, donc je me tourne vers vous
Je crée d'abord une table bidon, sans index, ni primary key (important)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TABLE MaTable (col1 int) INSERT INTO MaTable VALUES(1) INSERT INTO MaTable VALUES(2) INSERT INTO MaTable VALUES(3) INSERT INTO MaTable VALUES(4) INSERT INTO MaTable VALUES(5)
J'utilise SQL Server management studio et je lance une première Query avec une Transaction (sans commit) qui met à jour l'enregistrement de valeur 2:
Je lance alors une deuxième query
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 BEGIN TRANSACTION UPDATE MaTable SET Col1 = Col1 WHERE Col1 = 2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 BEGIN TRANSACTION UPDATE MaTable SET Col1 = Col1 WHERE Col1 = 3
La deuxième query se mettra alors en attente tant que je ne commit pas la première
Après m'avoir arraché les cheveux, je suppose que la query 1, vu qu'il n y a pas d'index va scanner tout le contenu de la table, mais pourquoi est-ce que la table n'est pas libérée une fois le scan terminé ?
Y a t-il un autre moyen d'éviter ça sans utiliser d'index ?
Merci d'avance
Partager