Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 11952|Vastaus: 0

[Lähde] Yksityiskohtainen selitys väliaikaisista taulukoista SQL-palvelintietokannoissa

[Kopioi linkki]
Julkaistu 28.5.2020 10.52.28 | | | |
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不会被释放掉.




Edellinen:TypeScript-ominaisuusaccessor (set,get)
Seuraava:SQL Server hakee edellisiä päiviä nykyisestä järjestelmäajasta
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com