Udostępnij za pośrednictwem


Kaskadowe ograniczenia więzy integralność

Za pomocą kaskadowych ograniczenia integralność referencyjnej, zdefiniuj akcje, które SQL Server przyjmuje się, gdy użytkownik próbuje usunąć lub zaktualizować klucz, do których istniejącego punktu kluczy obcych.

Materiały referencyjne klauzul TWORZENIE tabela and ALTER tabela instrukcji obsługują klauzul ON DELETE i ON UPDATE.Kaskadowe czynności można zdefiniować za pomocą Okno dialogowe relacji klucz obcy:

  • NA USUNIĘCIE {BRAK akcja | CASCADE | zestaw NULL | zestaw DEFAULT}]

  • NA AKTUALIZOWANIE {BRAK akcja | CASCADE | zestaw NULL | zestaw DEFAULT}]

Akcja nie jest domyślnym, jeśli ON DELETE lub ON UPDATE nie został określony.

  • NA BEZ USUWANIA akcja
    Określa, że jeśli podjęta próba usunięcia wiersza przy użyciu klucz, do którego odnosi się kluczy obcych w istniejących wierszy w innych tabelach, powstaje błąd i instrukcja DELETE zostanie przywrócona.

  • W AKTUALIZACJI BEZ DZIAŁAŃ
    Określa, że jeśli podjęta próba zaktualizowania wartości klucza w wierszu, w której klucz odwołuje się do nich klucze obce w istniejących wierszy w innych tabelach, powstaje błąd i instrukcja UPDATE zostanie przywrócona.

CASCADE, zestaw NULL i zestaw DEFAULT dopuszczać usuwania lub aktualizacji wartości klucz wpływać na tabel zdefiniowanych mają relacji kluczy obcych z można prześledzić do tabela, na których jest wykonywana na modyfikację.Jeżeli zdefiniowano także kaskadowych więzów akcje w tabelach miejsce docelowe, określone akcje kaskadowych mają również zastosowanie dla tych wierszy, usuwane lub aktualizowane.Nie można określić CASCADE dla kluczy obcych i klucze podstawowe, które mają timestamp Kolumna.

  • NA USUWANIE KASKADOWE
    Określa, że jeśli podjęta próba usunięcia wiersza przy użyciu klucz, do którego odnosi się kluczy obcych w istniejących wierszy w innych tabelach, wszystkie wiersze zawierające te klucze obce są również usuwane.

  • NA AKTUALIZACJĘ KASKADOWE
    Określa, że jeśli próby zaktualizować wartości klucza w wierszu, w którym wartość klucza odwołuje się kluczy obcych w istniejących wierszy w innych tabelach, wszystkie wartości wchodzące w skład klucz obcy także są aktualizowane przy użyciu nowej wartości określone dla tego klucza.

    Uwaga

    Nie można określić CASCADE, jeśli timestamp Kolumna jest częścią klucz obcy lub klucz występujący w odwołaniu.

  • NA USUWANIE zestaw NULL
    Określa, że jeśli podjęta próba usunięcia wiersza przy użyciu klucza, do którego odnosi się kluczy obcych w istniejących wierszy w innych tabelach, wszystkie wartości wchodzące w skład klucz obcy w wierszach, do których istnieją odwołania są zestaw wartości null.Wszystkie kolumny klucz obcy tabela miejsce docelowe muszą być nullable dla tego ograniczenia do wykonać.

  • W AKTUALIZACJI zestaw NULL
    Określa, że jeśli przeprowadzana jest próba aktualizowania wiersza przy użyciu klucza, do którego odnosi się kluczy obcych w istniejących wierszy w innych tabelach, wszystkie wartości wchodzące w skład klucz obcy w wierszach, do których istnieją odwołania są zestaw wartości null.Wszystkie kolumny klucz obcy tabela miejsce docelowe muszą być nullable dla tego ograniczenia do wykonać.

  • NA USUNIĘCIE DOMYŚLNEGO zestaw
    Określa, że jeśli podjęta próba usunięcia wiersza przy użyciu klucza, do którego odnosi się kluczy obcych w istniejących wierszy w innych tabelach, wszystkie wartości wchodzące w skład klucz obcy w wierszach, do których istnieją odwołania są zestaw do ich wartości domyślne.Wszystkie kolumny klucz obcy tabela miejsce docelowe muszą mieć domyślnej definicji dla tego ograniczenia do wykonać.Jeżeli kolumna jest pustych, a nie ma żadnych jawnych domyślny zestaw wartości, NULL staje się oczywiste domyślna wartość w kolumnie.Wszystkie wartości niepustych, które są ustawione z powodu ON DELETE zestaw DEFAULT muszą mieć odpowiadające im wartości w tabela podstawowa utrzymanie ważności ograniczenie na klucz obcy.

  • NA DOMYŚLNY ZESTAW AKTUALIZACJI
    Określa, że jeśli przeprowadzana jest próba aktualizowania wiersza przy użyciu klucza, do którego odnosi się kluczy obcych w istniejących wierszy w innych tabelach, wszystkie wartości wchodzące w skład klucz obcy w wierszach, do których istnieją odwołania się do ich wartości domyślne.Wszystkie kolumny klucz obcy tabela miejsce docelowe muszą mieć domyślnej definicji dla tego ograniczenia do wykonać.Jeżeli kolumna jest pustych, a nie ma żadnych jawnych domyślny zestaw wartości, NULL staje się oczywiste domyślna wartość w kolumnie.Wszystkie wartości inne niż null, które są ustawione z powodu ON UPDATE zestaw DEFAULT muszą mieć odpowiadające im wartości w tabela podstawowej, aby zachować ważność ograniczenie na klucz obcy.

Należy wziąć pod uwagę FK_ProductVendor_Vendor_VendorID ograniczeniePurchasing.ProductVendor tabela in AdventureWorks. To ograniczenie ustanawia relację klucz obcy z VendorID kolumnaProductVendor tabelaVendorID kolumna klucz podstawowy w Purchasing.Vendor tabela.Jeżeli ON DELETE CASCADE określono ograniczenia, usuwanie wierszy w Dostawcy where VendorID jest równa 100 usuwa także trzy wiersze w ProductVendor where VendorID jest równa 100.Jeżeli określono ON UPDATE CASCADE ograniczenia, aktualizowanie VendorID wartość Dostawcy tabela od 100 do 155 aktualizuje również VendorID wartości w trzech wierszach w ProductVendor whose VendorID wartości aktualnie równą 100.

ON DELETE CASCADE nie mogą być określone dla tabela, która ma wyzwalacz Z INSTEAD DELETE.Dla tabel zawierających wyzwalacze UPDATE INSTEAD Z następujących czynności nie można określić: ON DELETE zestaw NULL ON DELETE zestaw DEFAULT, ON UPDATE CASCADE, ON UPDATE zestaw NULL i ON UDATE zestaw DEFAULT.

Wiele kaskadowy akcje

Instrukcje poszczególnych DELETE lub UPDATE można uruchomić serię kaskadowych więzów działań.Na przykład baza danych zawiera trzy tabele: TableA, TableB, and TableC.Klucz obcy w TableB jest zdefiniowana z ON DELETE CASCADE przed klucz podstawowy w TableA.Klucz obcy w TableC jest zdefiniowana z ON DELETE CASCADE przed klucz podstawowy w TableB.Jeśli Instrukcja DELETE Usuwa wiersze w TableA, operacja powoduje usunięcie wszystkich wierszy w TableB klucze obce dopasowania usunięte klucze podstawowe w TableA, a następnie usuwa żadnych wierszy w TableC mieć kluczy obcych, które odpowiadają usuniętym klucze podstawowe w TableB.

Seria kaskadowych więzów akcje wywoływane przez pojedynczy DELETE lub UPDATE muszą tworzyć drzewa, który zawiera nie odwołań cyklicznych.Brak tabela może występować więcej niż jedną czas na liście wszystkich kaskadowych akcji więzów, w wyniku DELETE lub UPDATE.Ponadto drzewa kaskadowych więzów akcji nie może mieć więcej niż jedną ścieżka z żadną określoną tabelą.Każdej gałęzi drzewa jest zakończone po napotkaniu tabela, dla którego akcja nie została określona lub jest ustawieniem domyślnym.

Wyzwalacze i akcje referencyjna kaskadowy

Kaskadowe akcje więzów ognia wyzwalacze później UPDATE lub DELETE później w następujący sposób:

Wszystkich kaskadowych akcji więzów bezpośrednio powodowane przez oryginalny DELETE lub UPDATE są wykonywane jako pierwsze.

Jeśli istnieją później wyzwalaczy zdefiniowany w tabelach, których dotyczy problem, wykonywane są te pożaru wyzwalacze kaskadowych po wszystkich działań.Te wyzwalacze ognia w odwrotnej kolejności kaskadowych akcja.Jeśli istnieje wiele wyzwalaczy w jednej tabela, ich uruchomienie w kolejności losowej, chyba że istnieje dedykowany pierwszego lub ostatniego wyzwalacza dla tabela.Ta kolejność jest określona przy użyciu sp_settriggerorder.

Jeżeli wiele łańcuchów kaskadowych pochodzą z tabela, która została bezpośredniego obiekt miejsce docelowe akcja UPDATE lub DELETE, kolejność, w którym te łańcuchów ognia ich odpowiednich wyzwalaczy jest nieokreślony.Jednak jeden łańcuch zawsze uruchomieniu wszystkie wyzwalacze, przed uruchomieniem instalacji wypalania innego łańcucha.

Wyzwalacz po w tabela, która jest bezpośrednią akcja UPDATE lub DELETE uruchomieniu, niezależnie od tego, czy problem dotyczy wszystkich wierszy.Nie ma żadnych innych tabel, które dotyczy kaskadowych w tym przypadek.

Jeśli wykonać dowolną z poprzednich wyzwalacze UPDATE lub DELETE operacji w innych tabelach, te akcje można uruchomić pomocniczy kaskadowych powiązany.Te łańcuchów pomocnicze są przetwarzane dla każdego UPDATE lub DELETE operacji w danej chwili po wszystkich wyzwalaczy na wszystkich pożaru łańcuchów podstawowego.Ten proces można powtarzać dla kolejnych operacji UPDATE lub DELETE cyklicznie.

Wykonywanie CREATE, ALTER, DELETE lub innych operacji (DDL) języka definicja danych wewnątrz Wyzwalacze mogą powodować wyzwalacze DDL uruchomienie.To może następnie wykonywać operacje DELETE lub UPDATE uruchomić dodatkowe łańcuchów kaskadowych i wyzwalaczy.

Wewnątrz każdej określonego kaskadowych łańcucha akcja więzów zostanie wygenerowany błąd, powstaje błąd, nie wyzwalacze po są uruchamiane w tym łańcuchu i DELETE lub UPDATE operacji tworzenia łańcucha jest przywracana.

tabela, która ma wyzwalacz Z INSTEAD nie może mieć również klauzula materiały referencyjne, która określa akcja kaskadowych.Jednak wyzwalacz po tabela skierowana kaskadowych akcja może być wykonywany instrukcja INSERT, UPDATE lub DELETE w innej tabela lub widoku, który uruchomieniu wyzwalacz Z INSTEAD zdefiniowane dla tego obiektu.

Kaskadowe informacji o katalogu ograniczenia referencyjna

Podczas badania sys.foreign_keys wykazu widoku zwraca następujące wartości, które wskazują kaskadowych więzów ograniczenia określone dla klucz obcy.

Wartość

Description

0

BRAK akcja

1

KASKADOWO

2

zestaw NULL

3

zestaw DOMYŚLNE

The UPDATE_RULE and DELETE_RULE columns returned by sp_fkeys and sp_foreignkeys return 0 when CASCADE, zestaw NULL, or zestaw DEFAULT is specified; and return 1 when NO akcja is specified or is the default.

Gdy klucz obcy jest określony jako obiektu sp_help, dane wyjściowe zestaw wyników zawiera następujące kolumny.

Nazwa kolumna

Typ danych

Description

delete_action

nvarchar(9)

Wskazuje, czy akcji delete CASCADE, zestaw NULL, zestaw DEFAULT, Akcja NO lub n/D (nie dotyczy).

update_action

nvarchar(9)

Wskazuje, czy działanie aktualizacji CASCADE, zestaw NULL, zestaw DEFAULT, Akcja NO lub n/D (nie dotyczy).