Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 11952|Svar: 0

[Källa] Detaljerad förklaring av temporära tabeller i SQL-serverdatabaser

[Kopiera länk]
Publicerad på 2020-05-28 10:52:28 | | | |
Tillfälliga tabeller är mycket viktiga i SQL-databasen, och följande är en detaljerad introduktion till egenskaperna och användningen av temporära tabeller i SQL-databasen, endast som referens.

Tillfälliga tabeller liknar persistenta tabeller, men temporära tabeller lagras i tempdb och raderas automatiskt när de inte längre används. Det finns två typer av temporära tabeller: lokala och globala. De skiljs åt genom namn, synlighet och tillgänglighet.

Den tillfälliga tabellen har följande egenskaper:

  • Lokala temporära tabeller är tabeller som användare lägger till prefixet "#" när de skapar tabeller, vilka är oberoende beroende på databasanslutningar. Endast databasanslutningen som skapade den lokala tillfälliga tabellen har tillgång till tabellen, och andra anslutningar kan inte komma åt tabellen.
  • I olika databasanslutningar, även om de lokala tillfälliga tabellerna som skapas har samma "namn", har dessa tabeller ingen relation till varandra. I SQLSERVER säkerställer en speciell namngivningsmekanism oberoendeenheten hos lokala temporära tabeller i databasanslutningar.
  • Verkliga temporära tabeller utnyttjar databasens temporära tabellutrymme, som automatiskt underhålls av databassystemet, vilket sparar tabellutrymme. Och eftersom det tillfälliga tabellutrymmet generellt använder virtuellt minne minskar antalet I/O:er på hårddisken kraftigt, vilket också förbättrar systemets effektivitet.
  • Den tillfälliga tabellen töms automatiskt efter att transaktionen eller sessionen är över, så du behöver inte komma ihåg att radera data när den är slut.


Lokala tillfälliga tabeller

Namnet på den lokala temporära tabellen prefixeras med en enda numerisk symbol (#); De är endast synliga för den aktuella användaranslutningen (dvs. anslutningen som skapar den lokala tillfälliga tabellen); Den raderas när en användare kopplar bort från en SQL Server-instans.

Till exempel skapar vi en lokal temporär tabell i en databasanslutning med följande sats: #Temp

Databasanslutning 1:



Starta sedan databasanslutning 2 samtidigt för att utföra frågeställningen #temp

Databasanslutning 2:



Låt oss se vad resultatet är av databasanslutning 2?

Databasanslutning 2:



Resultaten visar att databasanslutning 2 inte kan hitta tabell #Temp. Detta innebär att den temporära tabellen #Temp endast är synlig för databasanslutning 1 som skapade den, men inte för databasanslutning 2.

Global tillfällig tabell

Namnet på en global temporär tabell föregås av två numeriska symboler (##) och är synligt för alla databasanslutningar när de skapas, och tas bort när alla databasanslutningar som refererar till tabellen kopplas bort från SQL Server.

Till exempel skapar vi en global tillfällig tabell ##Temp i en databasanslutning med följande sats, och lägger sedan in tre datarader

Databasanslutning 1:



Sedan frågar vi ##Temp的数据 i databasanslutning 2

Databasanslutning 2:



Resultatet för databasanslutning 2 är som följer

Databasanslutning 2:



Som du kan se kan databasanslutning 2 framgångsrikt komma åt den globala temporära tabellen ##Temp skapad av databasanslutning 1, men om vi stänger dataanslutning 1 nu och sedan kör ##Temp查询语句会发生什么呢 av databasanslutning 2? Resultaten är följande:

Stäng databasanslutning 1, och sedan utförs databasanslutning 2 igen:



Vi fann att efter att ha stängt databasanslutning 1 kan databasanslutning 2 inte hitta den globala temporära tabellen ##Temp了. Detta beror på att efter att databasanslutning 1 stängts finns det inget uttalande i databasanslutning 2 som använder den temporära tabellen ##Temp, så sqlservern tror att det inte finns någon databasanslutning som refererar till den globala temporära tabellen ##Temp了 just nu, så den kommer att ##Temp释放掉了.


Därefter försöker vi stänga den globala temptabellen ##Temp持有事务中的排他锁 (X-lock) i databasanslutning 2 och sedan stänga databasanslutning 1.

Databasanslutning 1:



Databasanslutning 2:



Stäng databasanslutning 1, och sedan körs databasanslutning 2:



Resultatet visar att även om vi stänger databasanslutning 1, eftersom databasanslutning 2 har hållit den globala temporära tabellen ##Temp的排他锁 (X-låset) i transaktionen, så kommer den temporära tabellen # #Temp并没有随着数据库连接1的关闭而被释放掉, så länge transaktionen som startades i databasanslutning 2 inte rullas tillbaka eller committas, så kommer databasanslutning 2 alltid att innehålla den tillfälliga tabellen ##Temp的排他锁. Vid denna tidpunkt tror Sqlserver att det fortfarande finns en databasanslutning som refererar till den globala temptabell ##Temp, alltså ##Temp不会被释放掉.




Föregående:TypeScript-egenskapsaccessor (set,get)
Nästa:SQL Server-frågor de föregående dagarna av nuvarande systemtid
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com