|
|
Publisert på 28.05.2020 10:52:28
|
|
|
|

Midlertidige tabeller er svært viktige i SQL-databasen, og følgende er en detaljert introduksjon til egenskapene og bruken av midlertidige tabeller i SQL-databaser, kun til referanse.
Midlertidige tabeller ligner på persistente tabeller, men midlertidige tabeller lagres i tempdb og slettes automatisk når de ikke lenger er i bruk. Det finnes to typer midlertidige tabeller: lokale og globale. De skilles ut ved navn, synlighet og tilgjengelighet.
Den midlertidige tabellen har følgende egenskaper:
- Lokale midlertidige tabeller er tabeller som brukere legger til "#"-prefikset når de oppretter tabeller, og som er uavhengige i henhold til databaseforbindelser. Kun databasetilkoblingen som opprettet den lokale midlertidige tabellen har tilgang til tabellen, og andre tilkoblinger kan ikke få tilgang til tabellen.
- I ulike databaseforbindelser, selv om de lokale midlertidige tabellene som opprettes har samme "navn", har disse tabellene ingen sammenheng med hverandre. I SQLSERVER sikrer en spesiell navnemekanisme uavhengigheten til lokale midlertidige tabeller i databasetilkoblinger.
- Ekte midlertidige tabeller utnytter midlertidig tabellplass i databasen, som automatisk vedlikeholdes av databasesystemet, og dermed sparer tabellplass. Og fordi det midlertidige tabellrommet vanligvis bruker virtuelt minne, reduseres antallet I/O-er på harddisken betydelig, så systemeffektiviteten forbedres også.
- Den midlertidige tabellen tømmes automatisk etter at transaksjonen eller økten er over, så du trenger ikke huske å slette dataene etter at den er brukt opp.
Lokale midlertidige tabeller
Navnet på den lokale midlertidige tabellen er prefikset med et enkelt numerisk symbol (#); De er kun synlige for den nåværende brukertilkoblingen (dvs. tilkoblingen som oppretter den lokale midlertidige tabellen); Den slettes når en bruker kobler fra en SQL Server-instans.
For eksempel oppretter vi en lokal midlertidig tabell i en databasetilkobling med følgende setning: #Temp
Databasetilkobling 1:
Start deretter databasetilkobling 2 samtidig for å utføre spørringen #temp
Databasetilkobling 2:
La oss se hva resultatet av databasetilkobling 2 er?
Databasetilkobling 2:
Resultatene viser at databasetilkobling 2 ikke kan finne tabell #Temp. Dette betyr at den midlertidige tabellen #Temp kun er synlig for databasetilkobling 1 som opprettet den, men ikke for databasetilkobling 2.
Global midlertidig tabell
Navnet på en global midlertidig tabell prefikseres med to numeriske symboler (##) og er synlig for alle databasetilkoblinger når de opprettes, og fjernes når alle databaseforbindelser som refererer til tabellen kobles fra SQL Server.
For eksempel oppretter vi en global midlertidig tabell ##Temp i en databaseforbindelse med følgende setning, og setter deretter inn tre rader med data
Databasetilkobling 1:
Deretter spør vi ##Temp的数据 i databaseforbindelse 2
Databasetilkobling 2:
Resultatet for databasetilkobling 2 er som følger
Databasetilkobling 2:
Som du ser, kan databasetilkobling 2 få tilgang til den globale midlertidige tabellen ##Temp opprettet av databasetilkobling 1, men hvis vi lukker datatilkobling 1 nå og så kjører ##Temp查询语句会发生什么呢 av databasetilkobling 2? Resultatene er som følger:
Lukk databasetilkobling 1, og deretter kjører databasetilkobling 2 igjen:
Vi fant at etter å ha lukket databaseforbindelse 1, kan ikke databasetilkobling 2 finne den globale midlertidige tabellen ##Temp了. Dette er fordi etter at databasetilkobling 1 er lukket, finnes det ingen setning i databasetilkobling 2 som bruker den midlertidige tabellen ##Temp, så sqlserver tror at det ikke finnes noen databasetilkobling som refererer til den globale midlertidige tabellen ##Temp了 på dette tidspunktet, så den vil ##Temp释放掉了.
Deretter prøver vi å lukke den globale midlertidige tabellen ##Temp持有事务中的排他锁 (X-lock) i databaseforbindelse 2 og deretter lukke databasetilkobling 1.
Databasetilkobling 1:
Databasetilkobling 2:
Lukk databasetilkobling 1, og deretter kjører databasetilkobling 2:
Resultatet viser at selv om vi lukker databasetilkobling 1, fordi databasetilkobling 2 har holdt den globale midlertidige tabellen ##Temp的排他锁 (X-låsen) i transaksjonen, vil den midlertidige tabellen # #Temp并没有随着数据库连接1的关闭而被释放掉, så lenge transaksjonen startet i databasetilkobling 2 ikke rulles tilbake eller committes, så vil databasetilkobling 2 alltid inneholde den midlertidige tabellen ##Temp的排他锁. På dette tidspunktet vil Sqlserver tro at det fortsatt finnes en databasetilkobling som refererer til den globale temp-tabellen ##Temp, altså ##Temp不会被释放掉. |
Foregående:TypeScript-egenskapsaccessor (set,get)Neste:SQL Server-spørringer de foregående dagene av nåværende systemtid
|