Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Określa właściwości ograniczenia KLUCZ PODSTAWOWY, KLUCZ OBCY, UNIKATOWY lub CHECK, który jest częścią nowej definicji kolumny dodanej do tabeli przy użyciu funkcji ALTER TABLE.
Transact-SQL konwencje składni
Syntax
Syntax for SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL database in Microsoft Fabric
[ CONSTRAINT constraint_name ]
{
[ NULL | NOT NULL ]
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor ]
[ WITH ( index_option [, ...n ] ) ]
[ ON { partition_scheme_name (partition_column_name)
| filegroup | "default" } ]
| [ FOREIGN KEY ]
REFERENCES [ schema_name . ] referenced_table_name
[ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}
Składnia dla usługi Microsoft Fabric Warehouse
[ CONSTRAINT constraint_name ]
{
{ PRIMARY KEY | UNIQUE }
NONCLUSTERED
(column [ ASC | DESC ] [ ,...n ] )
NOT ENFORCED
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
NOT ENFORCED
}
Arguments
CONSTRAINT
Określa początek definicji dla klucza podstawowego, UNIKATOWEGO, KLUCZA OBCEgo lub ograniczenia CHECK.
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.
NULL | NIE NULL
Określa, czy kolumna może akceptować NULL wartości. Kolumny, które nie zezwalają na NULL wartości, można dodawać tylko wtedy, gdy mają określony domyślny rozmiar. Jeśli nowa kolumna zezwala na NULL wartości i nie określono wartości domyślnych, nowa kolumna zawiera NULL każdy wiersz w tabeli. Jeśli nowa kolumna zezwala na NULL wartości i zostanie dodana domyślna definicja z nową kolumną, opcja WITH VALUES może służyć do przechowywania wartości domyślnej w nowej kolumnie dla każdego istniejącego wiersza w tabeli.
Jeśli nowa kolumna nie zezwala na NULL wartości, należy dodać definicję DOMYŚLNą z nową kolumną. Nowa kolumna zostanie automatycznie załadowana z wartością domyślną w nowych kolumnach w każdym istniejącym wierszu.
Gdy dodanie kolumny wymaga fizycznych zmian w wierszach danych tabeli, takich jak dodawanie wartości DOMYŚLNYch do każdego wiersza, blokady są przechowywane w tabeli podczas uruchamiania alter TABLE. Ma to wpływ na możliwość zmiany zawartości tabeli, gdy blokada jest w miejscu. Natomiast dodanie kolumny, która zezwala na NULL wartości i nie określa wartości domyślnej, jest tylko operacją metadanych i nie obejmuje żadnych blokad.
Jeśli używasz CREATE TABLE ustawień bazy danych i sesji lub ALTER TABLE, i ewentualnie zastąpić wartość null typu danych, który jest używany w definicji kolumny. Zalecamy, aby zawsze jawnie definiować niekompilowane kolumny jako NULL lub NOT NULL , jeśli używasz typu danych zdefiniowanego przez użytkownika, aby umożliwić kolumnie używanie domyślnej wartości null typu danych. Aby uzyskać więcej informacji, zobacz CREATE TABLE.
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 .
W usłudze Microsoft Fabric Warehouse NONCLUSTERED nie ma efektu.
Z FILLFACTOR = 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 współczynnika wypełnienia określonego 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 jako jedyna opcja indeksu WITH FILLFACTOR , która ma zastosowanie do klucza podstawowego lub unikatowych ograniczeń jest zachowywana 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, tak jak w ON default lub ON [default]. Jeśli określono wartość domyślnąQUOTED_IDENTIFIER, opcja musi być włączona dla bieżącej sesji. Jest to ustawienie domyślne. Aby uzyskać więcej informacji, zobacz SET QUOTED_IDENTIFIER (Transact-SQL).
NIE EGZEKWOWANE
W usłudze Microsoft Fabric Warehouse, klucz podstawowy, unikatowy klucz i ograniczenia klucza obcego wymagają wymuszania. Integralność ograniczeń musi być utrzymywana przez aplikację.
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órego się odwołuje.
schema_name
To nazwa schematu, do którego należy tabela, do której odwołuje się ograniczenie KLUCZ OBCY.
referenced_table_name
Czy tabela jest przywoływane przez ograniczenie KLUCZA OBCEgo.
ref_column
Jest 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, które składają się na klucz obcy, są ustawione, NULL gdy odpowiedni wiersz w tabeli nadrzędnej zostanie usunięty. 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 ma wartość null i nie ma jawnego zestawu wartości domyślnych, 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.
ON DELETE CASCADE nie można zdefiniować, jeśli INSTEAD OF wyzwalacz ON DELETE już istnieje w tabeli, która jest zmieniana.
Na przykład w AdventureWorks2025 bazie danych ProductVendor tabela ma relację odwołania z tabelą Vendor .
ProductVendor.
VendorIDklucz obcy odwołuje się do .Vendor
VendorID klucz podstawowy.
Jeśli instrukcja DELETE jest wykonywana w wierszu w Vendor tabeli, a akcja ON DELETE CASCADE jest określona dla ProductVendorparametru .VendorID Aparat bazy danych sprawdza, czy w tabeli znajduje się co najmniej jeden wiersz zależny ProductVendor . Jeśli istnieją, wiersze zależne w ProductVendor tabeli zostaną usunięte oprócz wiersza, do którego Vendor odwołuje się tabela.
Z drugiej strony, jeśli nie określono żadnej akcji, aparat bazy danych zgłasza błąd i cofa akcję Vendor usuwania w wierszu, gdy w ProductVendor tabeli 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ą ustawiane, NULL gdy zostanie zaktualizowany odpowiedni wiersz 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 ma wartość null i nie ma jawnego zestawu wartości domyślnych, 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 ProductVendor tabela ma relację odwołania z tabelą Vendor .
ProductVendor.
VendorIDklucz obcy odwołuje się do .Vendor
VendorID klucz podstawowy.
Jeśli instrukcja UPDATE jest wykonywana w wierszu w Vendor tabeli i ON UPDATE CASCADE określono akcję dla ProductVendorparametru VendorID .ProductVendor Aparat bazy danych sprawdza, czy w tabeli znajduje się co najmniej jeden wiersz zależny. Jeśli istnieje, wiersz zależny w ProductVendor tabeli zostanie zaktualizowany, oprócz wiersza, do którego Vendor odwołuje się tabela.
Z drugiej strony, jeśli nie określono żadnej akcji, aparat bazy danych zgłasza błąd i cofa akcję Vendor aktualizacji w wierszu, gdy w ProductVendor tabeli znajduje się co najmniej jeden wiersz odwołujący się do niego.
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.
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 WITH NOCHECK naruszeń ograniczeń, chyba że określono opcję. 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 zapytania, pasując do ograniczenia 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.
Examples
Aby zapoznać się z przykładami, zobacz ALTER TABLE (Transact-SQL).