Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 11952|Válasz: 0

[Forrás] Az ideiglenes táblák részletes magyarázata SQL szerver adatbázisokban

[Linket másol]
Közzétéve 2020. 05. 28. 10:52:28 | | | |
Az ideiglenes táblák nagyon fontosak a Sqlserver adatbázisban, és az alábbiakban részletes bevezetés található az ideiglenes táblák jellemzőibe és használatához az SQL adatbázisban, kizárólag hivatkozási célokra.

Az ideiglenes táblák hasonlóak az állandó táblákhoz, de az ideiglenes táblák a tempdb-ben tárolódnak, és automatikusan törlődnek, ha már nem használják őket. Kétféle ideiglenes táblázat létezik: helyi és globális. Nevük, láthatóságuk és elérhetőségük alapján megkülönböztetik őket.

Az ideiglenes táblázat a következő jellemzőkkel rendelkezik:

  • A helyi ideiglenes táblák olyan táblák, amelyeket a felhasználók a "#" előtagot adnak fel táblák létrehozásakor, és amelyek az adatbázis-kapcsolatok alapján függetlenek. Csak az az adatbázis-kapcsolat, amely létrehozta a helyi ideiglenes táblát, fér hozzá a táblához, míg más kapcsolatok nem férhetnek hozzá a táblához.
  • Különböző adatbázis-kapcsolatokban, bár a létrehozott helyi ideiglenes táblák ugyanazt a "nevüket" viselik, ezek a táblák nem állnak egymással kapcsolatban. Az SQLSERVER-ben egy speciális elnevezési mechanizmus biztosítja a helyi ideiglenes táblák függetlenségét az adatbázis-kapcsolatokban.
  • Az igazi ideiglenes táblák kihasználják az adatbázis ideiglenes tábláterét, amelyet automatikusan az adatbázis rendszere karbantart, így tabelhelyet takarítanak meg. Mivel az ideiglenes táblázattér általában virtuális memóriát használ, a merevlemezen lévő I/O-k száma jelentősen csökken, így a rendszer hatékonysága is javul.
  • Az ideiglenes tábla automatikusan kiürül a tranzakció vagy ülésszak vége után, így nem kell emlékezned törölni az adatokat, miután azok lejárnak.


Helyi ideiglenes táblázatok

A helyi ideiglenes tábla neve egyetlen numerikus szimbólummal (#) van előtagok; Csak a jelenlegi felhasználói kapcsolat számára láthatók (azaz az a kapcsolat, amely létrehozza a helyi ideiglenes táblát); Törlik, amikor egy felhasználó megszakítja a kapcsolatot egy SQL Server példányról.

Például egy adatbázis-kapcsolatban létrehozunk egy helyi ideiglenes táblát a következő állítással: #Temp

Adatbázis-kapcsolat 1:



Ezután egyszerre indítsuk el az adatbázis 2-es kapcsolatot, hogy végrehajtsuk a lekérdezést #temp

Adatbázis-kapcsolat 2:



Nézzük meg, mi az eredménye a 2. adatbázis-kapcsolatnak?

Adatbázis-kapcsolat 2:



Az eredmények azt mutatják, hogy a 2. adatbázis-kapcsolat nem találja meg a #Temp. táblázatot. Ez azt jelenti, hogy az ideiglenes tábla #Temp csak az adatbázis-kapcsolat 1 számára látható, amely létrehozta, de nem a 2. adatbázis-kapcsolat számára.

Globális ideiglenes táblázat

A globális ideiglenes tábla neve két numerikus szimbólummal (##) van előtagja, amely bármely adatbázis-kapcsolat számára látható létrehozáskor, majd eltávolítják, ha az összes táblázatra hivatkozó adatbázis-kapcsolat el van választva az SQL Serverről.

Például létrehozunk egy globális ideiglenes táblát ##Temp egy adatbázis-kapcsolatban a következő állítással, majd három sor adatot helyezünk be

Adatbázis-kapcsolat 1:



Ezután a 2-es adatbázis-kapcsolatban a ##Temp的数据-et kérdezzük

Adatbázis-kapcsolat 2:



Az adatbázis-kapcsolat 2 eredménye a következő:

Adatbázis-kapcsolat 2:



Ahogy látod, az adatbázis-kapcsolat 2 sikeresen hozzáfér a globális ideiglenes táblához ##Temp, amit az adatbázis-kapcsolat 1 hozott létre, de ha most zárjuk az 1-es adatkapcsolatot, majd végrehajtjuk az adatbázis-kapcsolat ##Temp查询语句会发生什么呢-jét? Az eredmények a következők:

Zárjuk le az 1-es adatbázis-kapcsolatot, majd a 2-es adatbázis-kapcsolat újra fut el:



Azt találtuk, hogy az 1-es adatbázis-kapcsolat lezárása után a 2-es adatbázis-kapcsolat nem találja meg a globális ideiglenes táblát ##Temp了. Ez azért van, mert miután az adatbázis-kapcsolat 1 lezárul, nincs olyan állítás az adatbázis-kapcsolat 2-ben, amely az ideiglenes ##Temp táblát használná, így a sqlserver úgy gondolja, hogy jelenleg nincs adatbázis-kapcsolat, amely a globális ideiglenes táblára ##Temp了 hivatkozna, így ##Temp释放掉了 lesz.


Ezután megpróbáljuk lezárni a globális temp táblát ##Temp持有事务中的排他锁 (X-lock) az adatbázis-kapcsolat 2-ben, majd az 1-es adatbázis-kapcsolatot.

Adatbázis-kapcsolat 1:



Adatbázis-kapcsolat 2:



Zárjuk le az 1-es adatbázis-kapcsolatot, majd a 2-es adatbázis-kapcsolat fut el:



Az eredmény azt mutatja, hogy bár lezárjuk az 1-es adatbázis-kapcsolatot, mivel az adatbázis-kapcsolat 2 a globális ideiglenes táblát ##Temp的排他锁 (X zárolást) tartja a tranzakcióban, az ideiglenes táblát # #Temp并没有随着数据库连接1的关闭而被释放掉, amíg a 2-es adatbázis-kapcsolatban indult tranzakció nem kerül vissza vagy kötelezővé válik, akkor az adatbázis-kapcsolat 2 mindig tartja az ideiglenes ##Temp的排他锁 táblát. Ekkor a Sqlserver úgy gondolja, hogy még mindig létezik adatbázis-kapcsolat, amely a globális temp táblára ##Temp hivatkozik, tehát ##Temp不会被释放掉.




Előző:TypeScript property accessor (set,get)
Következő:Az SQL Server a jelenlegi rendszeridő előző napjait kérdezi
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com