Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 11952|Svare: 0

[Kilde] Detaljert forklaring av midlertidige tabeller i SQL-serverdatabaser

[Kopier lenke]
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
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com