Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 11952|Odpowiedź: 0

[Źródło] Szczegółowe wyjaśnienie tabel tymczasowych w bazach danych serwerów SQL

[Skopiuj link]
Opublikowano 28.05.2020 10:52:28 | | | |
Tabele tymczasowe są bardzo ważne w bazie danych Sqlserver, a poniżej przedstawiono szczegółowe wprowadzenie do charakterystyki i zastosowania tabel tymczasowych w bazie SQL, wyłącznie jako referencja.

Tabele tymczasowe są podobne do tabel trwałych, ale tabele tymczasowe są przechowywane w tempdb i automatycznie usuwane, gdy przestają być używane. Istnieją dwa typy tabel tymczasowych: lokalne i globalne. Wyróżniają się ich nazwą, widocznością i dostępnością.

Tymczasowy stół ma następujące cechy:

  • Lokalne tabele tymczasowe to tabele, do których użytkownicy dodają prefiks "#" podczas tworzenia tabel, a które są niezależne w zależności od połączeń z bazą danych. Dostęp do tabeli ma tylko połączenie bazy danych, które utworzyło lokalną tabelę tymczasową, a inne połączenia nie mają dostępu do tabeli.
  • W różnych powiązaniach bazy danych, chociaż lokalne tymczasowe tabele mają tę samą "nazwę", te tabele nie mają ze sobą żadnych relacji. W SQLSERVER specjalny mechanizm nazewnictwa zapewnia niezależność lokalnych tabel tymczasowych w połączeniach bazy danych.
  • Prawdziwe tymczasowe tabele wykorzystują tymczasową przestrzeń tabelową bazy danych, która jest automatycznie utrzymywana przez system bazodanowy, oszczędzając tym samym miejsce w tabeli. A ponieważ tymczasowa przestrzeń tabelowa zazwyczaj korzysta z pamięci wirtualnej, liczba operacji I/O na dysku twardym jest znacznie zmniejszona, co poprawia efektywność systemu.
  • Tabela tymczasowa jest automatycznie opróżniana po zakończeniu transakcji lub sesji, więc nie musisz pamiętać o usuwaniu danych po ich wyczerpaniu.


Lokalne stoły tymczasowe

Nazwa lokalnej tabeli tymczasowej poprzedzona jest pojedynczym symbolem liczbowym (#); Są widoczne tylko dla bieżącego połączenia użytkownika (czyli połączenia tworzącego lokalną tabelę tymczasową); Jest on usuwany, gdy użytkownik rozłącza się z instancją SQL Server.

Na przykład tworzymy lokalną tabelę tymczasową w połączeniu z bazą danych za pomocą następującego polecenia: #Temp

Połączenie z bazą danych 1:



Następnie jednocześnie uruchom połączenie bazy danych 2, aby wykonać zapytanie #temp

Połączenie z bazą danych 2:



Zobaczmy, jaki jest wynik połączenia z bazą danych 2?

Połączenie z bazą danych 2:



Wyniki pokazują, że połączenie bazy danych 2 nie może znaleźć tabeli #Temp. Oznacza to, że tymczasowy #Temp tabeli jest widoczny tylko dla połączenia bazy danych 1, które go utworzyło, ale nie dla połączenia z bazą danych 2.

Globalna tabela tymczasowa

Nazwa globalnej tabeli tymczasowej poprzedzona jest dwoma symbolami liczbowymi (##) i jest widoczna dla wszystkich połączeń bazy danych po utworzeniu, a usuwana jest, gdy wszystkie połączenia bazy danych odnoszące się do tabeli zostaną odłączone od SQL Server.

Na przykład tworzymy globalną tabelę tymczasową ##Temp w połączeniu z bazą danych za pomocą następującego zalecenia, a następnie wstawiamy trzy wiersze danych

Połączenie z bazą danych 1:



Następnie zapytujemy ##Temp的数据 w połączeniu z bazą danych 2

Połączenie z bazą danych 2:



Wynik połączenia bazy danych 2 wygląda następująco

Połączenie z bazą danych 2:



Jak widać, połączenie bazy danych 2 może pomyślnie uzyskać dostęp do globalnej tabeli tymczasowej ##Temp utworzonej przez połączenie bazy danych 1, ale jeśli teraz zamkniemy połączenie danych 1 i wykonamy ##Temp查询语句会发生什么呢 połączenia bazy danych 2? Wyniki są następujące:

Zamknij połączenie bazy danych 1, a następnie połączenie z bazą danych 2 wykonuje się ponownie:



Stwierdziliśmy, że po zamknięciu połączenia bazy danych 1, połączenie bazy danych 2 nie może znaleźć globalnej tabeli tymczasowej ##Temp了. Dzieje się tak, ponieważ po zamknięciu połączenia bazy danych 1 nie ma w połączeniu z bazą danych 2 żadnego polecenia używającego tymczasowej tabeli ##Temp, więc sqlserver uważa, że nie ma połączenia bazowego odwołującego się do globalnej tabeli tymczasowej ##Temp了 w tym momencie, więc będzie ##Temp释放掉了.


Następnie próbujemy zamknąć globalną tabelę tymczasową ##Temp持有事务中的排他锁 (X-lock) w połączeniu bazy danych 2, a następnie zamknąć połączenie bazy danych 1.

Połączenie z bazą danych 1:



Połączenie z bazą danych 2:



Zamknij połączenie bazy danych 1, a następnie połączenie z bazą danych 2 wykonuje:



Wynik pokazuje, że chociaż zamykamy połączenie bazy danych 1, ponieważ połączenie bazy danych 2 przechowywało globalną tymczasową tablicę ##Temp的排他锁 (blokada X) w transakcji, to tabela tymczasowa # #Temp并没有随着数据库连接1的关闭而被释放掉, o ile transakcja rozpoczęta w połączeniu bazy 2 nie jest cofnięta ani zatwierdzona, to połączenie bazy danych 2 zawsze będzie zawierać tabelę tymczasową ##Temp的排他锁. W tym momencie Sqlserver będzie uważał, że nadal istnieje połączenie bazowe odwołujące się do globalnej tabeli tymczasowej ##Temp, czyli ##Temp不会被释放掉.




Poprzedni:TypeScript property accessor (set,get)
Następny:SQL Server zapytuje poprzednie dni bieżącego czasu systemowego
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com