Udostępnij za pomocą


STÓŁ OLTAROWY table_constraint (Transact-SQL)

Dotyczy do:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMagazyn w Microsoft FabricBaza danych SQL w Microsoft Fabric

Określa właściwości KLUCZA PODSTAWOWEgo, UNIKATOWEGO, KLUCZA OBCEgo, ograniczenia CHECK lub definicji DOMYŚLNEj dodanej do tabeli przy użyciu ALTER TABLE.

Transact-SQL konwencje składni

Syntax

[ CONSTRAINT constraint_name ]   
{   
    { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        (column [ ASC | DESC ] [ ,...n ] )  
        [ WITH FILLFACTOR = fillfactor   
        [ WITH ( <index_option>[ , ...n ] ) ]  
        [ ON { partition_scheme_name ( partition_column_name ... )  
          | filegroup | "default" } ]   
    | FOREIGN KEY   
        ( column [ ,...n ] )  
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]   
    | CONNECTION
        ( { node_table TO node_table } 
          [ , {node_table TO node_table }]
          [ , ...n ]
        )
        [ ON DELETE { NO ACTION | CASCADE } ]
    | DEFAULT constant_expression FOR column [ WITH VALUES ]   
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )  
}  

Arguments

CONSTRAINT
Określa początek definicji KLUCZA PODSTAWOWEgo, UNIKATOWEGO, KLUCZA OBCEGO lub OGRANICZENIA CHECK albo DOMYŚLNEgo.

constraint_name
Jest nazwą ograniczenia. Nazwy ograniczeń muszą być zgodne z regułami dotyczącymi identyfikatorów, z tą różnicą, że nazwa nie może zaczynać się od znaku numeru (#). Jeśli constraint_name nie zostanie podana, do ograniczenia zostanie przypisana nazwa wygenerowana przez system.

KLUCZ PODSTAWOWY
To ograniczenie wymuszające integralność jednostki dla określonej kolumny lub kolumn przy użyciu unikatowego indeksu. Dla każdej tabeli można utworzyć tylko jedno ograniczenie klucza podstawowego.

UNIQUE
Jest ograniczeniem zapewniającym integralność jednostki dla określonej kolumny lub kolumn przy użyciu unikatowego indeksu.

KLASTROWANE | NIEKLASTROWANE
Określa, że indeks klastrowany lub nieklastrowany jest tworzony dla klucza podstawowego lub unikatowego ograniczenia. Domyślne ograniczenia KLUCZA PODSTAWOWEgo do KLASTRA. Domyślnie unikatowe ograniczenia mają wartość NONCLUSTERED.

Jeśli ograniczenie klastrowane lub indeks już istnieje w tabeli, nie można określić klastra. Jeśli ograniczenie klastrowane lub indeks już istnieje w tabeli, ograniczenia KLUCZA PODSTAWOWEgo są domyślne dla WARTOŚCI NONCLUSTERED.

Nie można określić kolumn, które są typu ntext, text, varchar(max), nvarchar(max), varbinary(max), xml lub image data types .

column
Jest kolumną lub listą kolumn określonych w nawiasach, które są używane w nowym ograniczeniu.

[ ASC | OPIS]
Określa kolejność sortowania kolumn lub kolumn uczestniczących w ograniczeniach tabeli. Wartość domyślna to ASC.

WITH FILLFACTOR =
Określa, jak pełny aparat bazy danych powinien sprawić, że każda strona indeksu będzie używana do przechowywania danych indeksu. Wartości fillfactor określone przez użytkownika mogą należeć do zakresu od 1 do 100. Jeśli wartość nie jest określona, wartość domyślna to 0.

Important

Dokumentowanie WITH FILLFACTOR = fillfactor jako jedyna opcja indeksu, która ma zastosowanie do klucza PODSTAWOWEgo lub unikatowych ograniczeń jest utrzymywana w celu zapewnienia zgodności z poprzednimi wersjami, ale nie zostanie udokumentowana w ten sposób w przyszłych wersjach. Inne opcje indeksu można określić w klauzuli index_option ALTER TABLE.

ON { partition_scheme_name(partition_column_name) | filegroup| "default" }
Dotyczy: SQL Server 2008 (10.0.x) i nowszych.

Określa lokalizację przechowywania indeksu utworzonego dla ograniczenia. Jeśli określono partition_scheme_name , indeks jest partycjonowany, a partycje są mapowane na grupy plików określone przez partition_scheme_name. Jeśli zostanie określona grupa plików , indeks zostanie utworzony w nazwie filegroup. Jeśli parametr "default" jest określony lub jeśli w ogóle nie zostanie określony, indeks zostanie utworzony w tej samej grupie plików co tabela. Jeśli parametr ON jest określony podczas dodawania indeksu klastrowanego dla klucza PODSTAWOWEgo lub unikatowego ograniczenia, cała tabela zostanie przeniesiona do określonej grupy plików podczas tworzenia klastrowanego indeksu.

W tym kontekście wartość domyślna nie jest słowem kluczowym; jest to identyfikator domyślnej grupy plików i musi być rozdzielany, jak w obszarze "default" lub ON [default]. Jeśli określono "domyślny", opcja QUOTED_IDENTIFIER musi być włączona dla bieżącej sesji. Jest to ustawienie domyślne.

ODWOŁANIA DO KLUCZY OBCYCH
Jest ograniczeniem zapewniającym integralność referencyjną danych w kolumnie. Ograniczenia KLUCZA OBCEgo wymagają, aby każda wartość w kolumnie istniała w określonej kolumnie w tabeli, do których odwołuje się odwołanie.

referenced_table_name
Czy tabela jest przywoływane przez ograniczenie KLUCZA OBCEgo.

ref_column
Jest kolumną lub listą kolumn w nawiasach, do których odwołuje się nowe ograniczenie KLUCZA OBCEgo.

PO USUNIĘCIU { BRAK AKCJI | CASCADE | USTAW WARTOŚĆ NULL | USTAW WARTOŚĆ DOMYŚLNĄ }
Określa, jaka akcja ma miejsce w wierszach w tabeli, która została zmieniona, jeśli te wiersze mają relację referencyjną, a przywoływane wiersze zostaną usunięte z tabeli nadrzędnej. Wartość domyślna to BRAK AKCJI.

BRAK AKCJI
Aparat bazy danych programu SQL Server zgłasza błąd, a akcja usuwania w wierszu w tabeli nadrzędnej jest cofana.

CASCADE
Odpowiednie wiersze są usuwane z tabeli odwołującej się, jeśli ten wiersz zostanie usunięty z tabeli nadrzędnej.

USTAW NULL
Wszystkie wartości tworzące klucz obcy są ustawione na wartość NULL po usunięciu odpowiedniego wiersza w tabeli nadrzędnej. Aby to ograniczenie było wykonywane, kolumny klucza obcego muszą mieć wartość null.

USTAW DOMYŚLNE
Wszystkie wartości składające się z klucza obcego są ustawiane na wartości domyślne po usunięciu odpowiedniego wiersza w tabeli nadrzędnej. Aby to ograniczenie było wykonywane, wszystkie kolumny klucza obcego muszą mieć definicje domyślne. Jeśli kolumna jest dopuszczana do wartości null i nie ma jawnego zestawu wartości domyślnych, wartość NULL staje się niejawną wartością domyślną kolumny.

Nie używaj CASCADE, jeśli tabela ma być uwzględniona w publikacji scalanej korzystającej z rekordów logicznych. Aby uzyskać więcej informacji na temat rekordów logicznych, zobacz Grupowanie zmian w powiązanych wierszach z rekordami logicznymi.

NIE można zdefiniować metody ON DELETE CASCADE, jeśli w tabeli, która jest zmieniana, istnieje już wyzwalacz ON DELETE.

Na przykład w AdventureWorks2025 bazie danych tabela ProductVendor ma relację odwołania z tabelą Vendor . Klucz obcy ProductVendor.VendorID odwołuje się do klucza podstawowego Vendor.VendorID .

Jeśli instrukcja DELETE jest wykonywana w wierszu w tabeli Vendor (Dostawca), a dla akcji ProductVendor.VendorID określono akcję ON DELETE CASCADE, aparat bazy danych sprawdza, czy w tabeli ProductVendor znajduje się co najmniej jeden wiersz zależny. Jeśli istnieją, wiersze zależne w tabeli ProductVendor zostaną usunięte oprócz wiersza, do którego odwołuje się tabela Vendor .

Z drugiej strony, jeśli nie określono żadnej akcji, aparat bazy danych zgłasza błąd i cofa akcję usuwania w wierszu Dostawca , gdy w tabeli ProductVendor znajduje się co najmniej jeden wiersz, który się do niego odwołuje.

PODCZAS AKTUALIZACJI { BRAK AKCJI | CASCADE | USTAW WARTOŚĆ NULL | USTAW WARTOŚĆ DOMYŚLNĄ }
Określa, jaka akcja dzieje się z wierszami w tabeli zmienionymi, gdy te wiersze mają relację referencyjną, a przywoływane wiersze są aktualizowane w tabeli nadrzędnej. Wartość domyślna to BRAK AKCJI.

BRAK AKCJI
Aparat bazy danych zgłasza błąd, a akcja aktualizacji w wierszu w tabeli nadrzędnej jest cofana.

CASCADE
Odpowiednie wiersze są aktualizowane w tabeli odwołującej się po zaktualizowaniu tego wiersza w tabeli nadrzędnej.

USTAW NULL
Wszystkie wartości tworzące klucz obcy są ustawione na wartość NULL po zaktualizowaniu odpowiedniego wiersza w tabeli nadrzędnej. Aby to ograniczenie było wykonywane, kolumny klucza obcego muszą mieć wartość null.

USTAW DOMYŚLNE
Wszystkie wartości tworzące klucz obcy są ustawione na wartości domyślne po zaktualizowaniu odpowiedniego wiersza w tabeli nadrzędnej. Aby to ograniczenie było wykonywane, wszystkie kolumny klucza obcego muszą mieć definicje domyślne. Jeśli kolumna jest dopuszczana do wartości null i nie ma jawnego zestawu wartości domyślnych, wartość NULL staje się niejawną wartością domyślną kolumny.

Nie używaj CASCADE, jeśli tabela ma być uwzględniona w publikacji scalanej korzystającej z rekordów logicznych. Aby uzyskać więcej informacji na temat rekordów logicznych, zobacz Grupowanie zmian w powiązanych wierszach z rekordami logicznymi.

NA AKTUALIZACJI CASCADE, USTAW WARTOŚĆ NULL lub USTAW WARTOŚĆ DOMYŚLNĄ nie można zdefiniować, jeśli zamiast wyzwalacza W AKTUALIZACJI już istnieje w tabeli, która jest zmieniana.

Na przykład w AdventureWorks2025 bazie danych tabela ProductVendor ma relację odwołania z tabelą Vendor . Klucz obcy ProductVendor.VendorID odwołuje się do klucza podstawowego Vendor.VendorID .

Jeśli instrukcja UPDATE jest wykonywana w wierszu w tabeli Vendor (Dostawca), a dla akcji ProductVendor.VendorID określono akcję ON UPDATE CASCADE, aparat bazy danych sprawdza, czy w tabeli ProductVendor znajduje się co najmniej jeden wiersz zależny. Jeśli istnieje, wiersz zależny w tabeli ProductVendor zostanie zaktualizowany, a także wiersz, do którego odwołuje się tabela Vendor .

Z drugiej strony, jeśli nie określono żadnej akcji, aparat bazy danych zgłasza błąd i przywraca akcję aktualizacji w wierszu Dostawca , gdy w tabeli ProductVendor znajduje się co najmniej jeden wiersz, który się do niego odwołuje.

NIE DOTYCZY REPLIKACJI
Dotyczy: SQL Server 2008 (10.0.x) i nowszych.

Można określić dla ograniczeń KLUCZA OBCEgo i ograniczeń CHECK. Jeśli ta klauzula jest określona dla ograniczenia, ograniczenie nie jest wymuszane, gdy agenci replikacji wykonują operacje wstawiania, aktualizowania lub usuwania.

CONNECTION Określa parę tabel węzłów, z którymi może nawiązać połączenie podane ograniczenie krawędzi. FUNKCJA ON DELETE określa, co się stanie z wierszami w tabeli krawędzi, gdy węzły, które zostały połączone za pośrednictwem krawędzi w tej tabeli krawędzi, zostaną usunięte.

DEFAULT
Określa wartość domyślną kolumny. Definicje DOMYŚLNE mogą służyć do podawania wartości dla nowej kolumny w istniejących wierszach danych. Nie można dodać definicji DOMYŚLNYch do kolumn, które mają typ danych sygnatury czasowej , właściwość IDENTITY, istniejącą definicję DOMYŚLNą lub powiązaną wartość domyślną. Jeśli kolumna ma istniejącą wartość domyślną, należy porzucić wartość domyślną, zanim będzie można dodać nową wartość domyślną. Jeśli dla kolumny typu zdefiniowanego przez użytkownika określono wartość domyślną, typ powinien obsługiwać niejawną konwersję z constant_expression do typu zdefiniowanego przez użytkownika. Aby zachować zgodność z wcześniejszymi wersjami programu SQL Server, do domyślnej nazwy ograniczenia można przypisać nazwę ograniczenia.

constant_expression
Jest wartością literału, wartością NULL lub funkcją systemową, która jest używana jako domyślna wartość kolumny. Jeśli constant_expression jest używana w połączeniu z kolumną zdefiniowaną jako typ zdefiniowany przez użytkownika programu Microsoft .NET Framework, implementacja typu musi obsługiwać niejawną konwersję z constant_expression do typu zdefiniowanego przez użytkownika.

Kolumna FOR
Określa kolumnę skojarzona z definicją DOMYŚLNą na poziomie tabeli.

Z WARTOŚCIAMI
W przypadku dodawania kolumny I ograniczenia DOMYŚLNEgo, jeśli kolumna zezwala na wartości NULL przy użyciu funkcji WITH VALUES , dla istniejących wierszy ustaw wartość nowej kolumny na wartość podaną w domyślnej constant_expression. Jeśli dodawana kolumna nie zezwala na wartości NULLS, dla istniejących wierszy wartość kolumny będzie zawsze ustawiana na wartość podaną w wyrażeniu stałej DEFAULT. Począwszy od programu SQL Server 2012, może to być operacja metadanych dodająca kolumny-not-null-as-an-online-operation. Jeśli jest on używany, gdy powiązana kolumna nie jest również dodawana, nie ma żadnego efektu.

CHECK
Jest ograniczeniem wymuszającym integralność domeny przez ograniczenie możliwych wartości, które można wprowadzić w kolumnie lub kolumnach.

logical_expression
Jest wyrażeniem logicznym używanym w ograniczeniu CHECK i zwraca wartość TRUE lub FALSE. logical_expression używane z ograniczeniami CHECK nie mogą odwoływać się do innej tabeli, ale mogą odwoływać się do innych kolumn w tej samej tabeli dla tego samego wiersza. Wyrażenie nie może odwoływać się do typu danych aliasu.

Remarks

Po dodaniu ograniczeń KLUCZ OBCY lub SPRAWDŹ wszystkie istniejące dane są weryfikowane pod kątem naruszeń ograniczeń, chyba że określono opcję WITH NOCHECK. Jeśli wystąpią jakiekolwiek naruszenia, funkcja ALTER TABLE zakończy się niepowodzeniem i zostanie zwrócony błąd. Gdy do istniejącej kolumny zostanie dodane nowe ograniczenie PODSTAWOWE lub UNIKATOWE, dane w kolumnie lub kolumnach muszą być unikatowe. Jeśli zostaną znalezione zduplikowane wartości, funkcja ALTER TABLE zakończy się niepowodzeniem. Opcja WITH NOCHECK nie ma wpływu na dodanie klucza podstawowego lub unikatowych ograniczeń.

Każdy klucz PODSTAWOWY i ograniczenie UNIKATOWE generuje indeks. Liczba ograniczeń UNIQUE i PRIMARY KEY nie może spowodować, że liczba indeksów w tabeli przekroczy 999 indeksów nieklastrowanych i 1 indeks klastrowany. Ograniczenia klucza obcego nie generują automatycznie indeksu. Jednak kolumny kluczy obcych są często używane w kryteriach sprzężenia w zapytaniach przez dopasowanie kolumn lub kolumn w ograniczeniu klucza obcego jednej tabeli z kolumną klucza podstawowego lub unikatowego lub kolumnami w drugiej tabeli. Indeks w kolumnach klucza obcego umożliwia aparatowi bazy danych szybkie znajdowanie powiązanych danych w tabeli kluczy obcych.

Program SQL Server 2022 (16.x) wprowadza wznawiane operacje dodawania ograniczeń tabeli dla klucza podstawowego i unikatowych ograniczeń klucza. Aby uzyskać więcej informacji na temat włączania i używania operacji wznawianych ALTER TABLE ADD CONSTRAINT , zobacz Wznawianie ograniczeń tabeli.

Examples

Aby zapoznać się z przykładami, zobacz ALTER TABLE (Transact-SQL).

Dalsze kroki