Articles

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 vendorszawsze 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ę vendorsI 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.