2009-10-30 11 views

Odpowiedz

32

Klucz podstawowy jest kolumną w tabeli.

Klucz podstawowy potrzebuje unikatowej wartości, która musi skądś pochodzić.

Sekwencja jest cechą niektórych produktów bazodanowych, które po prostu tworzą niepowtarzalne wartości. Po prostu zwiększa wartość i zwraca ją. Szczególną rzeczą jest to, że: nie ma izolacji transakcji, więc kilka transakcji nie może uzyskać tej samej wartości, inkrementacja również nie jest wycofywana. Bez sekwencji baz danych bardzo trudno jest wygenerować unikalne liczby zwiększające.

Inne produkty bazodanowe obsługują kolumny inicjowane automatycznie z rosnącym numerem.

Istnieją inne sposoby tworzenia niepowtarzalnych wartości dla kluczy podstawowych, na przykład Guids.

+0

Jeśli nie ma izolacji transakcji, to w jaki sposób można jej użyć? – rapt

+4

Nie ma izolacji transakcji dla generowania identyfikatorów. Zawsze zwraca następną wartość sekwencji. Izolacja transakcji oznaczałaby, że transakcja równoległa albo uzyskałaby tę samą wartość, albo trzeba czekać, aż druga transakcja się zatwierdzi, zanim będzie mogła uzyskać następną wartość. Nie jest to wymagane ani użyteczne. –

3

Sekwencja pozwala wypełnić klucz podstawowy unikalną, serializowaną liczbą.

To różni się od serial lub auto_incremement klucza podstawowego w tym sensie, że:

  • Jest to rzeczywisty obiekt bazy danych (trzeba ją stworzyć):

    sql> create sequence NAME_OF_YOUR_SEQUENCE;

  • You może przypisać niezależne uprawnienia do różnych użytkowników bazy danych:

    sql> grant select on NAME_OF_YOUR_SEQUENCE to NAME_OF_YOUR_USER;

  • Możesz użyć unikalnego numeru, który różni się pomiędzy kilkoma tabelami (nie tylko jednym). Powiedzmy, że masz cztery tabele z numerycznymi kluczami podstawowymi i chcesz unikalne numery wśród tych czterech tabel. Możesz użyć do tego sekwencji, nie martwiąc się o implementowanie mechanizmów blokujących, aby zrobić to "ręcznie".

  • Można zmienić swój numer do dowolnej wartości chcesz z alter sequence

  • Można przechodzić swoich numerów

    sql> create sequence NAME_OF_YOUR_SEQUENCE maxvalue 1500 cycle;

+0

A więc w jaki sposób sekwencja różni się od klucza kluczowego auto_increment? A może to właściwie sekwencja? – Blaise

+1

Sprawdź moją zaktualizowaną odpowiedź @Blaise –

5

Klucz podstawowy jest (z technicznego punktu widzenia) jedynie indeksem wymuszającym unikatowość (a także szybkość wykonywania zapytań). Jest tam pewna informacja semantyczna, która jest "kluczem" dla istoty, którą opisuje ten wiersz, ale to wszystko.

Sekwencja to zupełnie inna jednostka; istnieje odrębnie od tabel (podobnie jak procedura składowana) i można go wywołać w celu uzyskania kolejnych liczb.

Te dwa elementy są często używane razem w celu wygenerowania automatycznych kluczy podstawowych dla elementów, które nie mają sensownych kluczy "rodzimych". Ale są to dwa oddzielne pojęcia; możesz mieć tabele, w których klucz podstawowy jest jawnie zapełniany podczas wstawiania, i możesz mieć sekwencje, które są używane do wypełniania kolumn innych niż PK (lub nawet używane w sposób imperatywny podczas procedury przechowywanej, w odróżnieniu od wstawiania rekordów).

Powiązane problemy