Väliaikaiset taulut ovat erittäin tärkeitä Sqlserver-tietokannassa, ja seuraavassa on yksityiskohtainen johdatus väliaikaisten taulujen ominaisuuksiin ja käyttöön SQL-tietokannassa, vain viitteeksi.
Väliaikaiset taulut ovat samankaltaisia kuin pysyvät taulut, mutta väliaikaiset taulut tallennetaan tempdb:hen ja poistetaan automaattisesti, kun niitä ei enää käytetä. Väliaikaisia taulukoita on kahta tyyppiä: paikallisia ja globaaleja. Heidät erotetaan nimen, näkyvyyden ja saatavuuden perusteella.
Väliaikaisella taulukolla on seuraavat ominaisuudet:
- Paikalliset väliaikaiset taulut ovat tauluja, joihin käyttäjät lisäävät "#"-etuliitteen luodessaan tauluja, jotka ovat riippumattomia tietokantayhteyksien mukaan. Vain se tietokantayhteys, joka loi paikallisen väliaikaisen taulun, pääsee tauluun, ja muut yhteydet eivät pääse tauluun.
- Eri tietokantayhteyksissä, vaikka luoduilla paikallisilla väliaikaisilla tauluilla on sama "nimi", näillä tauluilla ei ole mitään yhteyttä toisiinsa. SQLSERVERISSÄ erityinen nimeämismekanismi varmistaa paikallisten väliaikaisten taulujen riippumattomuuden tietokantayhteyksissä.
- Aidot väliaikaiset taulut hyödyntävät tietokannan väliaikaista taulukkotilaa, jota tietokantajärjestelmä ylläpitää automaattisesti, säästäen näin taulukkotilaa. Koska väliaikainen taulukkotila käyttää yleensä virtuaalimuistia, kiintolevyn I/O-luku vähenee huomattavasti, mikä parantaa myös järjestelmän tehokkuutta.
- Väliaikainen taulukko tyhjennetään automaattisesti transaktion tai istunnon päätyttyä, joten sinun ei tarvitse muistaa poistaa tietoja sen loppumisen jälkeen.
Paikalliset väliaikaiset pöydät
Paikallisen väliaikaisen taulukon nimi on etuliite yhdellä numeerisella symbolilla (#); Ne näkyvät vain nykyiselle käyttäjäyhteydelle (eli yhteydelle, joka luo paikallisen väliaikaisen taulun); Se poistetaan, kun käyttäjä katkaisee yhteyden SQL Server -instanssiin.
Esimerkiksi luomme paikallisen väliaikaisen taulun tietokantayhteyteen seuraavalla lauseella: #Temp
Tietokantayhteys 1:
Sitten käynnistä tietokantayhteys 2 samanaikaisesti suorittaaksesi kyselyn #temp
Tietokantayhteys 2:
Katsotaanpa, mikä on tietokantayhteyden 2 tulos?
Tietokantayhteys 2:
Tulokset osoittavat, että tietokantayhteys 2 ei löydä taulukkoa #Temp. Tämä tarkoittaa, että väliaikainen taulu #Temp näkyy vain sen luoneelle tietokantayhteydelle 1, mutta ei tietokantayhteydelle 2.
Globaali väliaikainen taulukko
Globaalin väliaikaisen taulun nimi on etuliitteessä kaksi numeerista symbolia (##), ja se näkyy kaikille tietokantayhteyksille luodessa, ja poistetaan, kun kaikki taulukkoon viittaavat tietokantayhteydet on irrotettu SQL Serveristä.
Esimerkiksi luomme globaalin väliaikaisen taulun ##Temp tietokantayhteyteen seuraavalla lauseella ja lisäämme sitten kolme riviä dataa
Tietokantayhteys 1:
Sitten kysymme ##Temp的数据 tietokantayhteydestä 2
Tietokantayhteys 2:
Tietokantayhteyden 2 tulos on seuraava
Tietokantayhteys 2:
Kuten näette, tietokantayhteys 2 pääsee onnistuneesti käsiksi globaaliin väliaikaiseen taulukkoon ##Temp, jonka on luonut tietokantayhteys 1, mutta jos suljemme datayhteyden 1 nyt ja suoritamme sitten tietokantayhteyden 2:n ##Temp查询语句会发生什么呢? Tulokset ovat seuraavat:
Sulje tietokantayhteys 1, ja sitten tietokantayhteys 2 suoritetaan uudelleen:
Huomasimme, että kun tietokantayhteys 1 on suljettu, tietokantayhteys 2 ei löydä globaalia väliaikaista taulukkoa ##Temp了. Tämä johtuu siitä, että kun tietokantayhteys 1 on suljettu, tietokantayhteydessä 2 ei ole lausetta, joka käyttäisi väliaikaista taulukkoa ##Temp, joten sqlserver luulee, ettei tällä hetkellä ole tietokantayhteyttä, joka viittaisi globaaliin väliaikaiseen taulukkoon ##Temp了, joten se tekee ##Temp释放掉了.
Seuraavaksi yritämme sulkea globaalin väliaikaisen taulukon ##Temp持有事务中的排他锁 (X-lukko) tietokantayhteydessä 2 ja sitten tietokantayhteyden 1.
Tietokantayhteys 1:
Tietokantayhteys 2:
Sulje tietokantayhteys 1, ja sitten tietokantayhteys 2 suoritetaan:
Tulos osoittaa, että vaikka suljemme tietokantayhteyden 1, koska tietokantayhteys 2 on pitänyt globaalia väliaikaista taulua ##Temp的排他锁 (X-lukko) transaktiossa, väliaikaista taulukkoa # #Temp并没有随着数据库连接1的关闭而被释放掉, kunhan tietokantayhteydessä 2 alkanut transaktio ei ole peruttu tai sitoutunut, tietokantayhteys 2 pitää aina väliaikaista taulukkoa ##Temp的排他锁. Tällä hetkellä Sqlserver ajattelee, että globaaliin väliaikaiseen taulukkoon ##Temp viittaa edelleen tietokantayhteys, joten ##Temp不会被释放掉. |