SQL Server FOREIGN KEY (Polski)
Podsumowanie: w tym samouczku dowiesz się, jak używać ograniczenia klucza zagranicznego SQL Server do wymuszania połączenia między danymi w dwóch tabelach.
Wprowadzenie do ograniczenia klucza zagranicznego SQL Server
rozważ następujące tabelevendor_groups
Ivendors
:
każdy dostawca należy do grupy dostawców i każda grupa dostawców może mieć zero lub więcej dostawców. Relacja między tabelami vendor_groups
I vendors
jest jedna do wielu.,
dla każdego wiersza w tabeli vendors
zawsze można znaleźć odpowiedni wiersz w tabeli vendor_groups
.
jednak przy bieżącej konfiguracji tabel można wstawić wiersz do tabeli vendors
bez odpowiedniego wiersza w tabeli vendor_groups
. Podobnie można również usunąć wiersz w tabeli vendor_groups
bez aktualizowania lub usuwania odpowiednich wierszy w tabeli vendors
, co powoduje osierocone wiersze w tabeli vendors
.,
aby wymusić powiązanie między danymi w tabelachvendor_groups
Ivendors
, musisz ustanowić klucz obcy w tabelivendors
.
klucz obcy jest kolumną lub grupą kolumn w jednej tabeli, która jednoznacznie identyfikuje wiersz innej tabeli(lub tę samą tabelę w przypadku samookreślenia).
aby utworzyć klucz obcy, należy użyć ograniczenia FOREIGN KEY
.,
poniższe polecenia opuszczają tabelę vendors
I odtwarzają ją za pomocą FOREIGN KEY
constraint:
tabela vendor_groups
jest teraz wywoływana tabela nadrzędna, która jest tabelą, do której odwołuje się ograniczenie klucza obcego. Tabelavendors
jest nazywana tabelą potomną, która jest tabelą, do której stosuje się ograniczenie klucza obcego.,
w powyższej instrukcji, następująca klauzula tworzy FOREIGN KEY
ograniczenie o nazwie fk_group
które łączy group_id
w tabeli vendors
z group_id
w tabeli vendor_groups
:
składnia ograniczenia klucza obcego SQL Server
ogólna składnia tworzenia ograniczenia FOREIGN KEY
jest następująca:
przyjrzyjmy się tej składni szczegółowo.,
najpierw określFOREIGN KEY
nazwę ograniczenia po słowie kluczowymCONSTRAINT
. Nazwa ograniczenia jest opcjonalna, dlatego można zdefiniować ograniczenie FOREIGN KEY
w następujący sposób:
w tym przypadku SQL Server automatycznie wygeneruje nazwę ograniczenia FOREIGN KEY
.
Po Drugie, określ listę kolumn oddzielonych przecinkami w nawiasach po słowie kluczowym FOREIGN KEY
.,
Po Trzecie, podaj nazwę tabeli nadrzędnej, do której odwołuje się klucz obcy oraz listę kolumn oddzielonych przecinkami, które mają łącze z kolumną w tabeli podrzędnej.
przykład ograniczenia klucza obcego SQL Server
Po pierwsze, Wstaw kilka wierszy do vendor_groups
tabela:
Po Drugie, wstaw nowy dostawca z grupą dostawców do vendors
tabela:
Code language: SQL (Structured Query Language) (sql)
oświadczenie działało zgodnie z oczekiwaniami.,
Po trzecie, spróbuj wstawić nowego dostawcę, którego grupa dostawców nie istnieje w tabeli vendor_groups
:
Code language: SQL (Structured Query Language) (sql)
SQL Server wystąpił następujący błąd:
w tym przykładzie, z powodu ograniczenia FOREIGN KEY
odrzuciła wkładkę i wydała błąd.
działania referencyjne
ograniczenie klucza obcego zapewnia integralność odniesienia. Oznacza to, że można wstawić wiersz do tabeli podrzędnej tylko wtedy, gdy w tabeli nadrzędnej znajduje się odpowiedni wiersz.,
poza tym ograniczenie klucza obcego pozwala definiować akcje referencyjne, gdy wiersz w tabeli rodzica jest aktualizowany lub usuwany w następujący sposób:
ON UPDATE
ION DELETE
określa, która akcja zostanie wykonana, gdy wiersz w tabeli rodzica jest aktualizowany i usuwany., Dozwolone są następujące akcje : NO ACTION
, CASCADE
, SET NULL
I SET DEFAULT
Usuń akcje wierszy w tabeli nadrzędnej
Jeśli usuniesz jeden lub więcej wierszy w tabeli nadrzędnej można ustawić jedną z następujących akcji:
-
ON DELETE NO ACTION
: SQL Server wyświetla błąd i wycofuje akcję usuwania wiersza w tabeli nadrzędnej. -
ON DELETE CASCADE
: SQL Server usuwa wiersze w tabeli podrzędnej odpowiadające wierszowi usuniętemu z tabeli nadrzędnej., -
ON DELETE SET NULL
: SQL Server ustawia wiersze w tabeli podrzędnej naNULL
jeśli odpowiednie wiersze w tabeli nadrzędnej zostaną usunięte. Aby wykonać tę akcję, kolumny klucza obcego muszą być nullable. -
ON DELETE SET DEFAULT
SQL Server ustawia wiersze w tabeli podrzędnej na ich wartości domyślne, jeśli odpowiednie wiersze w tabeli nadrzędnej zostaną usunięte. Aby wykonać tę akcję, kolumny klucza obcego muszą mieć domyślne definicje. Zauważ, że kolumna nullable ma wartość domyślnąNULL
jeśli nie podano wartości domyślnej.,
domyślnie, SQL Server stosujeON DELETE NO ACTION
jeśli nie określisz jawnie żadnej akcji.
Akcja aktualizacji wierszy w tabeli rodzica
jeśli zaktualizujesz jeden lub więcej wierszy w tabeli rodzica, możesz ustawić jedną z następujących akcji:
-
ON UPDATE NO ACTION
: SQL Server wyświetla błąd i wycofuje akcję Aktualizacji wiersza w tabeli rodzica. -
ON UPDATE CASCADE
: SQL Server aktualizuje odpowiednie wiersze w tabeli podrzędnej, gdy wiersze w tabeli nadrzędnej są aktualizowane., -
ON UPDATE SET NULL
: SQL Server ustawia wiersze w tabeli podrzędnej naNULL
gdy odpowiedni wiersz w tabeli nadrzędnej jest aktualizowany. Zauważ, że kolumny klucza obcego muszą być nullable, aby ta akcja została wykonana. -
ON UPDATE SET DEFAULT
: SQL Server ustawia domyślne wartości dla wierszy w tabeli podrzędnej, które mają zaktualizowane odpowiednie wiersze w tabeli nadrzędnej.