Blokowanie tabel, Prośba o pomoc |
Blokowanie tabel, Prośba o pomoc |
8.07.2004, 23:36:49
Post
#1
|
|
Administrator serwera Grupa: Developerzy Postów: 521 Pomógł: 13 Dołączył: 2.04.2004 Skąd: 52°24' N 16°56' E Ostrzeżenie: (0%) |
Pytanie może banalne, ale nie mogę nigdzie znaleźć rozwiązania: czy Microsoft SQL Server 2000 (msde 2000 sp3a) obsługuje blokowanie tabel, coś takiego jak LOCK TABLES w mySQL?? niestety nie znalazłem manuala do Microsoft SQL Server 2000 no i nie mam kiedy podjechać do Empiku aby sprawdzić w książce...
---Edited--- ... trochę poszperałem, poprzeglądałem internet od tego czasu, bylem w empiku i niestety nie mieli na stanie tej książki , ale oszczędzę tego innym co go nie mają tak dużo jakby chcieli, lub dostępu do internetu ... W kwestii wyjaśnienia: wszystkie informacje przeze mnie prezentowane, są pobrane z kopii rozmowy z Markiem Adamczukiem z http://mssqlserver.org.pl, adres do topicu znajduje się tutaj (niestety aby przeglądać to forum trzeba się zarejestrować), jeśli ktoś będzie szukał dodatkowych informacji proponuję zajrzeć do Microsoft SQL Server BOL można pobrać stąd (cenne źródło informacji na temat SQL Server 2000 i msde 2000). Tyle tytułem wstępu czas przejść do właściwych informacji: Aby założyć blokadę na czas danej operacji (czyt. poleceń DELETE, INSERT, SELECT, UPDATE) potrzebujemy znać Locking Hints (po spolszczeniu HINT-y) oraz wiedzieć do czego służą blokady tabel i poznać ich zasadę działania w Microsoft SQL Server 2000. Najpierw przedstawię wykaz kilku HINT-ów:
Jeżeli chcemy założyć blokadę niestandardową na jakaś tabele, której pobieramy dane poleceniem SELECT to kod wyglądałby tak:
Objaśnienie: BEGIN TRAN i COMMIT TRAN zapobiegają dopisaniu jakiejkolwiek wartości do każdej tabeli w bazie. Jeżeli chcielibyśmy zablokować tabele, tak aby żadne dane nie zostały dodane w czasie pobierania przez nas danych z jakiejś tabeli, na czas wykonywania kilku (ew. większej liczby) zapytań, to przed pierwszym zapytaniem musimy wstawić BEGIN TRAN, a po ostatnim COMMIT TRAN, by zwolnić blokadę na bazie. Żeby blokada na tabelę zadziałała trzeba zdefiniować HINT-y, parametr WITH można pominąć, ale wtedy trzeba i tak umieścić listę HINT-ów w nawiasie okrągłym (z przecinkami), zaraz za nazwą tabeli, co z resztą ma miejsce również jak używamy WITH (wtedy jest to badziej czytelniejsze zapytanie, dla kogoś kto widzi takie pierwszy raz) też trzeba listę HINT-ów umieścić w nawiasie okrągłym (z przecinkami). Przykład: Mamy tabele: lockme id INT PRIMARY KEY; opisVARCCHAR(50); W niej jeden wiersz id=1, opis=ktoś_go_dodał. Napiszmy skrypt, który będzie pobierał ten wieersz i przy okazji zapobiegał zmodyfikowaniu go:
Wykaz umieszczania HINT-ów w zapytaniach INSERT, UPDATE oraz DELETE.
Wszystkie HINT-y:
Ten post edytował Zbłąkany 14.07.2004, 08:46:34 -------------------- Środowisko: Gentoo 2008.0 | Apache | PHP5 | PostgreSQL | MySQL | Postfix
Workstation: Gentoo 2008.0 | Firefox Thomas Alva Edison: "Aby coś wynaleźć wystarczy odrobina wyobraźni i sterta złomu ..." Odpowiedź na każde pytanie typu "Jak ...": "Nie da się, to nie PostgreSQL" |
|
|
14.07.2004, 10:01:48
Post
#2
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław |
Podpinam.
-------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 15.11.2024 - 07:16 |