|
|
Publié sur 28/05/2020 10:52:28
|
|
|
|

Les tables temporaires sont très importantes dans la base de données SQLSERVER, et voici une introduction détaillée aux caractéristiques et à l’utilisation des tables temporaires dans la base de données SQL, à titre de référence uniquement.
Les tables temporaires sont similaires aux tables persistantes, mais les tables temporaires sont stockées dans tempdb et sont automatiquement supprimées lorsqu’elles ne sont plus utilisées. Il existe deux types de tables temporaires : locales et globales. Ils se distinguent par leur nom, leur visibilité et leur disponibilité.
Le tableau temporaire présente les caractéristiques suivantes :
- Les tables temporaires locales sont des tables auxquelles les utilisateurs ajoutent le préfixe « # » lors de la création de tables, qui sont indépendantes selon les connexions à la base de données. Seule la connexion à la base de données qui a créé la table temporaire locale a accès à la table, et les autres connexions ne peuvent pas y accéder.
- Dans différentes connexions de bases de données, bien que les tables temporaires locales créées portent le même « nom », ces tables n’ont aucune relation entre elles. Dans SQLSERVER, un mécanisme de nommage spécial garantit l’indépendance des tables temporaires locales dans les connexions de bases de données.
- Les véritables tables tables temporaires tirent parti de l’espace de table temporaire de la base de données, qui est automatiquement maintenu par le système de base de données, économisant ainsi de l’espace dans les tables. Et comme l’espace de table temporaire utilise généralement la mémoire virtuelle, le nombre d’E/S sur le disque dur est fortement réduit, ce qui améliore également l’efficacité du système.
- La table temporaire est automatiquement vidée après la fin de la transaction ou de la session, donc vous n’avez pas à penser à supprimer les données une fois qu’elles sont épuisées.
Tables temporaires locales
Le nom de la table temporaire locale est précédé d’un seul symbole numérique (#) ; Ils ne sont visibles que par la connexion utilisateur actuelle (c’est-à-dire la connexion qui crée la table temporaire locale) ; Il est supprimé lorsqu’un utilisateur se déconnecte d’une instance SQL Server.
Par exemple, nous créons une table temporaire locale dans une connexion de base de données avec l’instruction suivante : #Temp
Connexion à la base de données 1 :
Ensuite, lance la connexion de base de données 2 en même temps pour effectuer la requête #temp
Connexion à la base de données 2 :
Voyons quel sera le résultat de la connexion de base de données 2 ?
Connexion à la base de données 2 :
Les résultats montrent que la connexion de base de données 2 ne peut pas trouver la table #Temp. Cela signifie que la #Temp temporaire de la table n’est visible que par la connexion de base de données 1 qui l’a créée, mais pas par la connexion de base de données 2.
Table temporaire mondiale
Le nom d’une table temporaire globale est précédé de deux symboles numériques (##) et est visible pour toute connexion à la base de données lors de sa création, et il est supprimé lorsque toutes les connexions référentielles à la table sont déconnectées de SQL Server.
Par exemple, nous créons une table temporaire globale ##Temp dans une connexion à une base de données avec l’instruction suivante, puis insérons trois lignes de données
Connexion à la base de données 1 :
Ensuite, nous interrogeons ##Temp的数据 dans la connexion de base de données 2
Connexion à la base de données 2 :
Le résultat de la connexion à la base de données 2 est le suivant
Connexion à la base de données 2 :
Comme vous pouvez le voir, la connexion de base de données 2 peut accéder avec succès à la table temporaire globale ##Temp créée par la connexion de base de données 1, mais si nous fermons la connexion de données 1 maintenant et exécutons ensuite le ##Temp查询语句会发生什么呢 de la connexion de base de données 2 ? Les résultats sont les suivants :
Fermez la connexion 1 à la base de données, puis la connexion 2 s’exécute à nouveau :
Nous avons constaté qu’après avoir fermé la connexion de base de données 1, la connexion de base de données 2 ne peut pas trouver la table temporaire globale ##Temp了. Cela s’explique par le fait qu’après la fermeture de la connexion de base de données 1, il n’y a aucune instruction dans la connexion de base de données 2 qui utilise la table temporaire ##Temp, donc le sqlserver pense qu’il n’y a pas de connexion de base de données référençant la table temporaire globale ##Temp了 à ce moment-là, donc il va ##Temp释放掉了.
Ensuite, nous essayons de fermer la table temporaire globale ##Temp持有事务中的排他锁 (X-lock) dans la connexion 2 de la base de données, puis de fermer la connexion 1.
Connexion à la base de données 1 :
Connexion à la base de données 2 :
Fermez la connexion 1 à la base de données, puis la connexion 2 s’exécute :
Le résultat montre que, bien que nous fermions la connexion de base de données 1, parce que la connexion de base de données 2 contient la table temporaire globale ##Temp的排他锁 (verrou X) dans la transaction, la table temporaire # #Temp并没有随着数据库连接1的关闭而被释放掉, tant que la transaction commencée dans la connexion de base de données 2 n’est pas annulée ou validée, la connexion de base de données 2 conservera toujours la table temporaire ##Temp的排他锁. À ce stade, Sqlserver pensera qu’il existe toujours une connexion à la base de données référant la table temporaire globale ##Temp, donc ##Temp不会被释放掉. |
Précédent:Accesseur de propriété TypeScript (set,get)Prochain:SQL Server interroge les jours précédents de l’heure système actuelle
|