Tabele tymczasowe bazy danych Sql Server
Tabele tymczasowe bazy danych Sql Server obecnie w trybie offline
- buty jordan na sprzedaż
- 16373
|
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
|