架构师_程序员_码农网

N Odzyskaj hasło
Zarejestruj się

QQ登录

Wystarczy jeden krok, aby rozpocząć

Wyszukiwanie
Wyświetl:6432|Odpowiedź: 0
打印 上一主题 下一主题

[ Informacje]Baza danych serwera Sql w tabeli tymczasowej wyjaśniona

[ Copy Link]
Tabele tymczasowe bazy danych Sql Server
P 跳转到指定楼层
właściciela budynku
发表于 2020-5-28 10:52:28|只看该作者回帖奖励 | Odwróćprzeglądanie|Tryb odczytu
Tabele tymczasowe są bardzo ważne w bazach danych Sqlserver. Poniżej znajduje się szczegółowy opis cech tabel tymczasowych i ich wykorzystania w bazach danych SQL, wyłącznie w celach informacyjnych.

Tabele tymczasowe są podobne do tabel stałych, ale tabele tymczasowe są przechowywane w tempdb i są automatycznie usuwane, gdy nie są już używane. Istnieją dwa rodzaje tabel tymczasowych: lokalne i globalne. Różnią się one nazwą, widocznością i dostępnością.

Tabele tymczasowe mają kilka cech charakterystycznych:

  • Lokalna tabela tymczasowa to tabela, do której użytkownik dodaje prefiks "#" podczas tworzenia tabeli i charakteryzuje się niezależnością w zależności od połączenia z bazą danych.
  • Tylko połączenie z bazą danych, które tworzy lokalną tabelę tymczasową, ma dostęp do tabeli, a inne połączenia nie mogą uzyskać dostępu do tabeli; Chociaż lokalne tabele tymczasowe utworzone w różnych połączeniach z bazą danych mają tę samą "nazwę", nie mają ze sobą żadnych relacji; W SQLSERVER lokalne tabele tymczasowe są gwarantowane jako niezależne od połączenia z bazą danych za pomocą specjalnego mechanizmu nazewnictwa. W SQLSERVER specjalny mechanizm nazewnictwa zapewnia niezależność lokalnych tabel tymczasowych od połączenia z bazą danych.
  • Prawdziwe tabele tymczasowe korzystają z tymczasowej przestrzeni tabel bazy danych, która jest automatycznie utrzymywana przez system bazy danych, oszczędzając w ten sposób przestrzeń tabel. Poprawia to również wydajność systemu, ponieważ przestrzeń tabel tymczasowych zazwyczaj wykorzystuje pamięć wirtualną, co znacznie zmniejsza liczbę operacji wejścia/wyjścia na dysk twardy.
  • Tabele tymczasowe są automatycznie opróżniane po zakończeniu transakcji lub sesji, więc nie trzeba pamiętać o usunięciu danych po ich użyciu.


Lokalne tabele tymczasowe

Lokalne tabele tymczasowe mają nazwy rozpoczynające się od jednocyfrowego symbolu (#); są one widoczne tylko dla bieżącego połączenia użytkownika (tj. połączenia, które utworzyło lokalną tabelę tymczasową); są one usuwane, gdy użytkownik rozłączy się z instancją SQL Server.

Na przykład, tworzymy lokalną tabelę tymczasową #Temp w połączeniu z bazą danych z następującą instrukcją

Połączenie z bazą danych 1:



Następnie jednocześnie uruchamiamy połączenie z bazą danych 2 i wykonujemy zapytanie dla #Temp

Połączenie z bazą danych 2:



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

Połączenie z bazą danych 2:



Wynik pokazuje, że tabela #Temp nie została znaleziona dla połączenia z bazą danych 2. Oznacza to, że #Temp, tabela tymczasowa, jest widoczna tylko dla połączenia z bazą danych 1, które ją utworzyło, i nie jest widoczna dla połączenia z bazą danych 2.

Globalne tabele tymczasowe

Globalna tabela tymczasowa, której nazwa zaczyna się od dwucyfrowego symbolu (##), jest widoczna dla każdego połączenia z bazą danych po jej utworzeniu i jest usuwana, gdy wszystkie połączenia z bazą danych odwołują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ącej instrukcji, a następnie wstawiamy trzy wiersze danych

Połączenie z bazą danych 1:



Następnie wykonujemy zapytanie ##Temp w połączeniu z bazą danych 2 z następującymi danymi

Połączenie z bazą danych 2:



Wynik połączenia z bazą danych 2 jest następujący

Połączenie z bazą danych 2:



Jak widać, połączenie z bazą danych 2 może z powodzeniem uzyskać dostęp do globalnej tabeli tymczasowej ##Temp utworzonej przez połączenie z bazą danych 1, ale co się stanie, jeśli teraz zamkniemy połączenie z danymi 1, a następnie wykonamy instrukcję zapytania ##Temp dla połączenia z bazą danych 2? Wynik jest następujący:

Zamknięcie połączenia z bazą danych 1, a następnie ponowne wykonanie połączenia z bazą danych 2:



Okazuje się, że po zamknięciu połączenia z bazą danych 1, połączenie z bazą danych 2 nie może znaleźć globalnej tabeli tymczasowej ##Temp. Dzieje się tak, ponieważ po zamknięciu połączenia z bazą danych 1 nie ma instrukcji w połączeniu z bazą danych 2, która używa tabeli tymczasowej ##Temp, więc Sqlserver uważa, że nie ma już połączenia z bazą danych odwołującego się do globalnej tabeli tymczasowej ##Temp i zwalnia ##Temp.


Następnie próbujemy utrzymać wyłączną blokadę (blokadę X) w transakcji na globalnej tabeli tymczasowej ##Temp w połączeniu z bazą danych 2, a następnie zamknąć połączenie z bazą danych 1.

Połączenie z bazą danych 1:



Połączenie z bazą danych 2:



Zamknięcie połączenia z bazą danych 1, a następnie wykonanie połączenia z bazą danych 2:



Wynik pokazuje, że nawet jeśli zamknęliśmy połączenie z bazą danych 1, tabela tymczasowa ##Temp nie zostanie zwolniona wraz z zamknięciem połączenia z bazą danych 1, ponieważ połączenie z bazą danych 2 utrzymywało wyłączną blokadę (blokadę X) na globalnej tabeli tymczasowej ##Temp podczas transakcji i tak długo, jak transakcja zainicjowana w połączeniu z bazą danych 2 nie zostanie wycofana lub zatwierdzona, połączenie z bazą danych 2 będzie nadal utrzymywać wyłączną blokadę (blokadę X) na tabeli tymczasowej ##Temp. Temp, wówczas Sqlserver założy, że nadal istnieje połączenie z bazą danych odwołujące się do globalnej tabeli tymczasowej ##Temp, więc ##Temp nie zostanie zwolniony.




Poprzedni artykułDostępy właściwości TypeScript (set, get)
Następny artykuł:sql server query the previous days of the current system time
Pierwszym z nich jest użycie tego samego modelu, który został użyty w poprzednim, a drugim jest użycie tego samego modelu, który został użyty w poprzednim.
Musisz się zalogować zanim będziesz mógł pisać ponownie Zaloguj się | Zarejestruj się

T a wersja integralnych zasad


ZASTRZEŻENIE: Całe oprogramowanie, materiały programistyczne lub artykuły opublikowane przez Code Farmer Network są ograniczone do celów naukowych i badawczych; powyższe treści nie mogą być wykorzystywane do celów komercyjnych lub nielegalnych, w przeciwnym razie wszelkie konsekwencje ponosi użytkownik. Ta strona zawiera informacje z sieci, spór o prawa autorskie nie ma nic wspólnego z tą stroną. Należy całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli podoba Ci się program, prosimy o wsparcie oryginalnego oprogramowania, kup rejestrację i uzyskaj lepszą oryginalną usługę. W przypadku jakichkolwiek naruszeń, prosimy o kontakt mailowy w celu ich rozwiązania.

Mail To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-18 22:17

Szybka odpowiedźPowrótdo góryPowrót do listy