Kaskadowe ograniczenia integralności referencyjnej
Za pomocą kaskadowych ograniczenia integralność referencyjnej, można zdefiniować akcje, SQL Server , gdy użytkownik próbuje usunąć lub zaktualizować klucz, do których istniejącego punktu kluczy obcych.
Klauzule odwołania z Tworzenie tabeli i ALTER TABLE instrukcji obsługi klauzule dotyczące usuwania i aktualizacji na.Kaskadowe akcji można również określić za pomocą okno dialogowe relacji kluczy obcych:
Przy USUWANIU {żadnej akcji | KASKADOWO | USTAW WARTOŚĆ NULL | USTAWIANIE DOMYŚLNEGO}]
Aktualizacji {żadnej akcji | KASKADOWO | USTAW WARTOŚĆ NULL | USTAWIANIE DOMYŚLNEGO}]
Akcja nie jest domyślnie, jeśli nie określono na usuwanie lub aktualizacji na.
PRZY USUWANIU ŻADNEJ AKCJI
Określa, że jeśli próby usunięcia wiersza z klucz przez zagranicznych kluczs w istniejących wierszy w innych tabelach, spowodował błąd i przywróceniu Instrukcja DELETE.W AKTUALIZACJI ŻADNEJ AKCJI
Określa, że jeśli próby aktualizacji wartości klucza w wierszu, w której klucz odwołuje się kluczy obcych w istniejących wierszy w innych tabelach, spowodował błąd i przywracana instrukcja UPDATE.
KASKADOWO, ustaw wartość NULL i Ustaw domyślne umożliwienia usuwania lub aktualizacji wartości klucza wpływa na tabel zdefiniowanych mają relacje klucz obcy, które można prześledzić do tabela, na których jest wykonywana modyfikacji.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, usunięte lub zaktualizowane.KASKADOWO, nie można określić dla kluczy obcych lub kluczy podstawowych, które mają timestamp kolumna.
NA USUWANIE KASKADOWE
Określa, że jeśli próby usunięcia wiersza z klucz przez zagranicznych kluczs w istniejących wierszy w innych tabelach wszystkie wiersze zawierające te obce kluczs są również usuwane.ON UPDATE CASCADE
Określa, że jeśli próby aktualizacji wartości klucza w wierszu, w którym wartość klucza odwołuje się kluczy obcych w istniejących wierszy w innych tabelach, wartości, które tworzą klucz obcy również są aktualizowane na nową wartość określona dla klucza.Ostrzeżenie
Nie można określić KASKADOWO, jeśli timestamp kolumna jest częścią klucz obcy lub klucz występujący w odwołaniu.
PRZY USUWANIU USTAW WARTOŚĆ NULL
Określa, że jeśli próby usuwania wiersza z kluczem odwołuje kluczy obcych w istniejących wierszy w innych tabelach, wszystkie wartości wchodzące w skład klucz obcy w wierszach, które są zestaw wartości null.Wszystkie kolumny klucz obcy tabela miejsce docelowe muszą być nullable dla tego ograniczenia do wykonać.USTAW WARTOŚĆ NULL NA AKTUALIZACJĘ
Określa, że jeśli próby aktualizacji wiersza z kluczem odwołuje kluczy obcych w istniejących wierszy w innych tabelach, wszystkie wartości wchodzące w skład klucz obcy w wierszach, które są zestaw wartości null.Wszystkie kolumny klucz obcy tabela miejsce docelowe muszą być nullable dla tego ograniczenia do wykonać.NA USUWANIE USTAWIANIE DOMYŚLNEGO
Określa, że jeśli próby usuwania wiersza z kluczem odwołuje kluczy obcych w istniejących wierszy w innych tabelach, wszystkie wartości wchodzące w skład klucz obcy w wierszach, które są zestaw do ich wartości domyślnych.Wszystkie kolumny klucz obcy tabela miejsce docelowe muszą mieć domyślnej definicji dla tego ograniczenia do wykonać.Jeśli kolumna jest nullable i nie ma wartości domyślnej jawne zestaw, NULL staje się wartości domyślnej niejawny w kolumnie.Wszelkie wartości niepustych, które są zestaw z powodu usunięcia na zestaw domyślne muszą mieć odpowiadające im wartości tabela podstawowa, aby zachować ważność ograniczenie na klucz obcy.NA DOMYŚLNY ZESTAW AKTUALIZACJI
Określa, że jeśli próby aktualizacji wiersza z kluczem odwołuje kluczy obcych w istniejących wierszy w innych tabelach, wszystkie wartości wchodzące w skład klucz obcy w wierszach, które są zestaw do ich wartości domyślnych.Wszystkie kolumny klucz obcy tabela miejsce docelowe muszą mieć domyślnej definicji dla tego ograniczenia do wykonać.Jeśli kolumna jest nullable i nie ma wartości domyślnej jawne zestaw, NULL staje się wartości domyślnej niejawny w kolumnie.Wszelkie wartości niezerowe, które są zestaw ze względu na AKTUALIZACJĘ zestaw domyślne muszą mieć odpowiadające im wartości tabela podstawowa, aby zachować ważność ograniczenie na klucz obcy.
Należy rozważyć FK_ProductVendor_Vendor_VendorID ograniczenie Purchasing.ProductVendor tabela w AdventureWorks2008R2.To ograniczenie ustanawia relacja klucz obcy z identyfikator producenta kolumna w ProductVendor tabela do identyfikator producenta kolumna klucz podstawowy w Purchasing.Vendor tabela.Jeśli określono ON DELETE CASCADE ograniczenia, usuwanie wiersza w dostawcy gdzie identyfikator dostawcy jest równa 100 usuwa także trzy wiersze w ProductVendor gdzie identyfikator producenta jest równa 100.Jeśli określono ON UPDATE CASCADE ograniczenia, aktualizowanie identyfikator dostawcy wartość w dostawcy aktualizuje tabela od 100 do 155 również identyfikator dostawcy wartości w trzech wierszach w ProductVendor którego identyfikator dostawcy aktualnie równe 100.
Nie można określić na DELETE CASCADE dla tabela, która ma wyzwalacza INSTEAD OF DELETE.Dla tabel, które mają wyzwalaczy INSTEAD OF UPDATE poniżej nie można określić: NA DELETE SET NULL na usuwanie Ustawianie domyślnego, ON UPDATE CASCADE, ON UPDATE SET NULL i Ustaw domyślne na UDATE.
Wiele operacji kaskadowych
Instrukcje usuwania pojedynczych lub aktualizacji można uruchomić serię działań więzów kaskadowych.Na przykład baza danych zawiera trzy tabele: TableA, TableB, i TableC.Klucz obcy w TableB ON DELETE CASCADE zdefiniowano przeciwko klucz podstawowy w TableA.Klucz obcy w TableC ON DELETE CASCADE zdefiniowano przeciwko klucz podstawowy w TableB.Jeśli Instrukcja DELETE Usuwa wiersze w TableA, operacja powoduje usunięcie wszystkich wierszy w TableB mają kluczy obcych dopasowywania usuniętych kluczy podstawowych w TableAi usuwa wszystkie wiersze w TableC mają kluczy obcych, spełniających usuniętych kluczy podstawowych w TableB.
Seria kaskadowych więzów akcje wywoływane przez pojedynczy usuwania lub aktualizacji musi stanowić drzewa, który zawiera nie odwołań cyklicznych.Brak tabela może się pojawić więcej niż jedno czas na liście wszystkie kaskadowych więzów akcje, które w wyniku usuwania lub aktualizacji.Ponadto drzewa kaskadowych akcje więzów nie może mieć więcej niż jedną ścieżka do określonej tabela.Wszelkie gałęzi drzewa jest zakończone po napotkaniu tabela, dla których określono żadnej akcji lub domyślne.
Wyzwalacze i akcje więzów kaskadowych
Akcje referencyjne kaskadowych ognia po aktualizacji lub po usunąć wyzwalacze w następujący sposób:
Wszystkie kaskadowych akcje więzów spowodowane bezpośrednio przez pierwotnego usuwania lub aktualizacji są wykonywane najpierw.
Jeśli istnieją po wyzwalaczy zdefiniowany na tabele, wykonywane są te pożaru wyzwalaczy kaskadowych po wszystkich działań.Te wyzwalacze ognia w przeciwnej kolejności kaskadowych akcja.Jeśli na pojedynczej tabela wiele wyzwalaczy, one ognia w kolejności losowej, chyba że dedykowany pierwszego lub ostatniego wyzwalacza dla tabela.Ta kolejność jest określona przy użyciu sp_settriggerorder.
Jeśli wiele łańcuchów kaskadowych pochodzą z tabela, który był bezpośrednio miejsce docelowe aktualizacji lub usunięcia działania, kolejność, w jakiej te łańcuchy ognia ich odpowiednich wyzwalaczy jest nieokreślony.Jednakże jeden łańcuch zawsze fires jego wyzwalacze, zanim innego łańcucha uruchamia wypalania.
Wyzwalacz po tabela, który jest bezpośrednio miejsce docelowe AKTUALIZACJĘ lub usunięcie akcja dotyczy uruchamiany niezależnie od tego, czy żadnych wierszy.Nie ma innych tabel dotyczy w tym przypadek kaskadowych.
Jeśli wykonanie jednej z poprzednich wyzwalaczy operacji aktualizacji lub usunięcia na inne tabele te akcje można uruchomić pomocnicze łańcuchów kaskadowych.Te łańcuchy pomocnicze są przetwarzane dla każdej operacji aktualizacji lub usunięcia w czas po wszystkich wyzwalaczy wszystkie podstawowe łańcuchów pożar.Proces ten może być powtarzane dla kolejnych operacji aktualizacji lub usunięcia rekursywnie.
Wykonywanie CREATE, ALTER, usuń lub innych operacji (DDL) języka definicja danych wewnątrz Wyzwalacze mogą powodować Wyzwalacze DDL na ogień.To może następnie wykonywać operacje usuwania lub aktualizacji uruchomić dodatkowe łańcuchów kaskadowych i wyzwalaczy.
Wewnątrz wszelkich szczególnych kaskadowych łańcucha Akcja referencyjna zostanie wygenerowany błąd, spowodował błąd, wyzwalacze nie po uruchomienia w tym łańcuchu i usuń lub wycofana operacji aktualizacji utworzony łańcuch.
tabela, która ma wyzwalacza INSTEAD OF nie może mieć również klauzula odniesienia, która określa akcja kaskadowych.Jednak wyzwalacz po tabela skierowana kaskadowych akcja można wykonać instrukcja INSERT, UPDATE lub DELETE w innej tabela lub widoku, który fires wyzwalacza INSTEAD OF zdefiniowane dla tego obiektu.
Informacje o wykazie ograniczenia więzów kaskadowe
Badanie sys.foreign_keys widok wykazu zwraca następujące wartości, które wskazują kaskadowych więzów określone ograniczenie klucz obcy.
Wartość |
Opis |
---|---|
0 |
BRAK AKCJI |
1 |
KASKADA |
2 |
USTAW WARTOŚĆ NULL |
3 |
USTAWIANIE DOMYŚLNEGO |
UPDATE_RULE i DELETE_RULE kolumn zwracanych przez sp_fkeys i sp_foreignkeys zwraca 0, gdy określono KASKADOWO, ustaw wartość NULL lub Ustaw domyślne; i zwraca 1, gdy akcja nie została określona lub jest domyślnie.
Gdy klucz obcy jest określony jako obiekt z sp_help, dane wyjściowe zestaw wyników zawiera następujące kolumny.
Nazwa kolumny |
Typ danych |
Opis |
---|---|---|
delete_action |
nvarchar(9) |
Wskazuje, czy Akcja usuwania KASKADOWO, ustaw wartość NULL, ustaw domyślny, Brak akcji lub Brak (nie dotyczy). |
update_action |
nvarchar(9) |
Wskazuje, czy jest aktualizacja akcja, KASKADOWO, ustaw wartość NULL, ustaw domyślny, Brak akcja lub Brak (nie dotyczy). |