Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Sklad v Microsoft Fabric
SQL databáze v Microsoft Fabric
Určuje vlastnosti PRIMÁRNÍHO KLÍČE, JEDINEČNÉHO, CIZÍHO KLÍČE, omezení CHECK nebo VÝCHOZÍ definice přidané do tabulky pomocí ALTER TABLE.
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
Určuje začátek definice pro omezení PRIMÁRNÍ KLÍČ, UNIQUE, FOREIGN KEY nebo CHECK nebo DEFAULT.
constraint_name
Je název omezení. Názvy omezení musí dodržovat pravidla pro identifikátory s tím rozdílem, že název nemůže začínat znakem čísla (#). Pokud constraint_name není zadán, je k omezení přiřazen název vygenerovaný systémem.
PRIMÁRNÍ KLÍČ
Je omezení, které vynucuje integritu entity pro zadaný sloupec nebo sloupce pomocí jedinečného indexu. Pro každou tabulku lze vytvořit pouze jedno omezení PRIMÁRNÍHO KLÍČE.
UNIQUE
Je omezení, které poskytuje integritu entity pro zadaný sloupec nebo sloupce pomocí jedinečného indexu.
CLUSTERED | NECLUSTERED
Určuje, že se clusterovaný nebo neclusterovaný index vytvoří pro omezení PRIMARY KEY nebo UNIQUE. Omezení PRIMÁRNÍHO KLÍČE jsou výchozí pro CLUSTERED. Omezení UNIQUE jsou výchozí pro NONCLUSTERED.
Pokud clusterované omezení nebo index již v tabulce existuje, nelze clusterED zadat. Pokud v tabulce již existuje clusterované omezení nebo index, omezení PRIMÁRNÍHO KLÍČE jsou výchozí na hodnotu NONCLUSTERED.
Sloupce, které jsou typu ntext, text, varchar(max), nvarchar(max), varbinary(max), xml nebo image , nelze zadat jako sloupce indexu.
column
Je sloupec nebo seznam sloupců zadaných v závorkách, které se používají v novém omezení.
[ ASC | POPIS ]
Určuje pořadí řazení sloupců nebo sloupců, které se účastní omezení tabulky. Výchozí hodnota je ASC.
WITH FILLFACTOR =
Určuje, jak by měl databázový stroj zaplnit každou indexovou stránku použitou k uložení dat indexu. Uživatelem zadané hodnoty fillfactor mohou být od 1 do 100. Pokud není zadaná hodnota, výchozí hodnota je 0.
Important
Dokumentování POMOCÍ FILLFACTOR = fillfactor jako jediná možnost indexu, která se vztahuje na omezení PRIMÁRNÍ KLÍČ nebo JEDINEČNÉ, je zachována kvůli zpětné kompatibilitě, ale nebude dokumentována tímto způsobem v budoucích verzích. Další možnosti indexu lze zadat v klauzuli index_option alter TABLE.
ON { partition_scheme_name(partition_column_name) | filegroup| "default" }
platí pro: SQL Server 2008 (10.0.x) a novější.
Určuje umístění úložiště indexu vytvořeného pro omezení. Pokud partition_scheme_name zadáte, index se rozdělí a oddíly se mapují na skupiny souborů určené partition_scheme_name. Pokud je zadána skupina souborů , index se vytvoří v pojmenované skupině souborů. Pokud je zadána hodnota Default nebo pokud není vůbec zadáno ZAPNUTO, index se vytvoří ve stejné skupině souborů jako tabulka. Pokud je zapnuto při přidání clusterovaného indexu pro omezení PRIMÁRNÍ KLÍČ nebo UNIQUE, celá tabulka se při vytvoření clusterovaného indexu přesune do zadané skupiny souborů.
V tomto kontextu není výchozí klíčové slovo; je identifikátor pro výchozí skupinu souborů a musí být oddělený, jako v on "default" nebo ON [default]. Pokud je zadán "výchozí", musí být pro aktuální relaci zapnutá možnost QUOTED_IDENTIFIER. Toto je výchozí nastavení.
ODKAZY NA CIZÍ KLÍČ
Je omezení, které poskytuje referenční integritu dat ve sloupci. Omezení cizího klíče vyžadují, aby každá hodnota ve sloupci existovala v zadaném sloupci v odkazované tabulce.
referenced_table_name
Je tabulka odkazovaná omezením CIZÍ KLÍČ.
ref_column
Je sloupec nebo seznam sloupců v závorkách odkazovaných novým omezením CIZÍ KLÍČ.
PŘI ODSTRANĚNÍ { ŽÁDNÁ AKCE | CASCADE | NASTAVIT HODNOTU NULL | NASTAVIT VÝCHOZÍ }
Určuje akci, která se stane s řádky v tabulce, která se změní, pokud tyto řádky mají referenční relaci a odkazovaný řádek se odstraní z nadřazené tabulky. Výchozí hodnota není ŽÁDNÁ AKCE.
ŽÁDNÁ AKCE
Databázový stroj SQL Serveru vyvolá chybu a akce odstranění na řádku v nadřazené tabulce se vrátí zpět.
CASCADE
Odpovídající řádky se odstraní z odkazující tabulky, pokud je tento řádek odstraněn z nadřazené tabulky.
SET NULL
Při odstranění odpovídajícího řádku v nadřazené tabulce jsou všechny hodnoty, které tvoří cizí klíč, nastaveny na hodnotu NULL. Aby bylo možné toto omezení provést, musí mít sloupce cizího klíče hodnotu null.
NASTAVTE VÝCHOZÍ NASTAVENÍ
Při odstranění odpovídajícího řádku v nadřazené tabulce jsou všechny hodnoty, které tvoří cizí klíč, nastaveny na výchozí hodnoty. Aby bylo toto omezení provedeno, musí mít všechny sloupce cizího klíče výchozí definice. Pokud je sloupec s možnou hodnotou null a neexistuje žádná explicitní výchozí hodnota nastavená, hodnota NULL se stane implicitní výchozí hodnotou sloupce.
Nezadávejte CASCADE, pokud bude tabulka zahrnuta do slučovací publikace, která používá logické záznamy. Další informace o logických záznamech naleznete v tématu Seskupit změny souvisejících řádků s logickými záznamy.
ON DELETE CASCADE nelze definovat, pokud již v tabulce, která se mění, existuje trigger MÍSTO TRIGGER ON DELETE.
Například v AdventureWorks2025 databázi má tabulka ProductVendor referenční relaci s tabulkou Vendor . Cizí klíč ProductVendor.VendorID odkazuje na primární klíč Vendor.VendorID .
Pokud je příkaz DELETE proveden na řádku v tabulce Dodavatel a akce ON DELETE CASCADE je určena pro ProductVendor.VendorID, databázový stroj zkontroluje jeden nebo více závislých řádků v tabulce ProductVendor . Pokud nějaké existují, odstraní se závislé řádky v tabulce ProductVendor kromě řádku odkazovaného v tabulce Vendor .
Naopak pokud není zadána ŽÁDNÁ AKCE, databázový stroj vyvolá chybu a vrátí akci odstranění na řádku Dodavatele , pokud je v tabulce ProductVendor alespoň jeden řádek, který na ni odkazuje.
ON UPDATE { NO ACTION | CASCADE | NASTAVIT HODNOTU NULL | NASTAVIT VÝCHOZÍ }
Určuje, co se stane s řádky v tabulce změněné, když tyto řádky mají referenční relaci a odkazovaný řádek se aktualizuje v nadřazené tabulce. Výchozí hodnota není ŽÁDNÁ AKCE.
ŽÁDNÁ AKCE
Databázový stroj vyvolá chybu a akce aktualizace na řádku v nadřazené tabulce se vrátí zpět.
CASCADE
Odpovídající řádky se aktualizují v odkazující tabulce, když se tento řádek aktualizuje v nadřazené tabulce.
SET NULL
Při aktualizaci odpovídajícího řádku v nadřazené tabulce jsou všechny hodnoty, které tvoří cizí klíč, nastaveny na hodnotu NULL. Aby bylo možné toto omezení provést, musí mít sloupce cizího klíče hodnotu null.
NASTAVTE VÝCHOZÍ NASTAVENÍ
Při aktualizaci odpovídajícího řádku v nadřazené tabulce jsou všechny hodnoty, které tvoří cizí klíč, nastaveny na výchozí hodnoty. Aby bylo toto omezení provedeno, musí mít všechny sloupce cizího klíče výchozí definice. Pokud je sloupec s možnou hodnotou null a neexistuje žádná explicitní výchozí sada hodnot, hodnota NULL se stane implicitní výchozí hodnotou sloupce.
Nezadávejte CASCADE, pokud bude tabulka zahrnuta do slučovací publikace, která používá logické záznamy. Další informace o logických záznamech naleznete v tématu Seskupit změny souvisejících řádků s logickými záznamy.
U FUNKCE UPDATE CASCADE, SET NULL nebo SET DEFAULT nelze definovat, pokud již v tabulce, která se mění, existuje aktivační událost MÍSTO TRIGGERU PŘI AKTUALIZACI.
Například v AdventureWorks2025 databázi má tabulka ProductVendor referenční relaci s tabulkou Vendor . Cizí klíč ProductVendor.VendorID odkazuje na primární klíč Vendor.VendorID .
Pokud je příkaz UPDATE proveden na řádku v tabulce Dodavatel a akce ON UPDATE CASCADE je zadána pro ProductVendor.VendorID, databázový stroj zkontroluje jeden nebo více závislých řádků v tabulce ProductVendor . Pokud nějaké existují, aktualizuje se závislý řádek v tabulce ProductVendor a také řádek odkazovaný v tabulce Dodavatel .
Pokud není zadána ŽÁDNÁ AKCE, databázový stroj vyvolá chybu a vrátí akci aktualizace na řádku Dodavatele , pokud je v tabulce ProductVendor alespoň jeden řádek, který na ni odkazuje.
NE PRO REPLIKACI
platí pro: SQL Server 2008 (10.0.x) a novější.
Lze zadat pro omezení cizího klíče a omezení CHECK. Pokud je tato klauzule určena pro omezení, omezení se nevynucuje, když agenti replikace provádějí operace vložení, aktualizace nebo odstranění.
CONNECTION Určuje dvojici tabulek uzlů, ke kterým se dané omezení edge může připojit. ON DELETE určuje, co se stane s řádky v hraniční tabulce, když se odstraní uzly, které byly propojené přes hrany v této hraniční tabulce.
DEFAULT
Určuje výchozí hodnotu sloupce. Výchozí definice lze použít k zadání hodnot pro nový sloupec v existujících řádcích dat. Výchozí definice nelze přidat do sloupců, které mají datový typ časového razítka , vlastnost IDENTITY, existující výchozí definici nebo vázané výchozí hodnoty. Pokud má sloupec existující výchozí hodnotu, musí se výchozí nastavení před přidáním nového výchozího nastavení vynechat. Pokud je pro sloupec typu definované uživatelem zadaná výchozí hodnota, měl by tento typ podporovat implicitní převod z constant_expression na uživatelem definovaný typ. Chcete-li zachovat kompatibilitu se staršími verzemi SQL Serveru, je možné přiřadit název omezení k výchozímu nastavení.
constant_expression
Je hodnota literálu, null nebo systémová funkce, která se používá jako výchozí hodnota sloupce. Pokud se constant_expression používá ve spojení se sloupcem definovaným uživatelem definovaným typem rozhraní Microsoft .NET Framework, musí implementace typu podporovat implicitní převod z constant_expression na uživatelem definovaný typ.
Sloupec FOR
Určuje sloupec přidružený k výchozí definici na úrovni tabulky.
S HODNOTAMI
Když přidáte sloupec A výchozí omezení, nastaví se hodnota nového sloupce na hodnotu zadanou ve výchozím constant_expression, pokud sloupec povoluje hodnoty NULLS pomocí WITH VALUES.
Pokud přidaný sloupec nepovoluje hodnotu NULLS pro existující řádky, hodnota sloupce bude vždy nastavena na hodnotu zadanou ve výrazu KONSTANTA DEFAULT.
Počínaje SQL Serverem 2012 se může jednat o operaci meta dat , která přidává sloupce s hodnotou not-null-as-an-online-operation.
Pokud se použije i v případě, že se související sloupec nepřidává, nemá žádný vliv.
CHECK
Je omezení, které vynucuje integritu domény omezením možných hodnot, které lze zadat do sloupce nebo sloupců.
logical_expression
Je logický výraz použitý v omezení CHECK a vrací hodnotu PRAVDA nebo NEPRAVDA.
logical_expression použitá s omezeními CHECK nemůže odkazovat na jinou tabulku, ale může odkazovat na jiné sloupce ve stejné tabulce pro stejný řádek. Výraz nemůže odkazovat na datový typ aliasu.
Remarks
Při přidání omezení CIZÍ KLÍČ nebo CHECK jsou všechna existující data ověřena pro porušení omezení, pokud není zadána možnost WITH NOCHECK. Pokud dojde k nějakým porušením, funkce ALTER TABLE selže a vrátí se chyba. Když se do existujícího sloupce přidá nové omezení PRIMARY KEY nebo UNIQUE, musí být data ve sloupci nebo sloupcích jedinečná. Pokud jsou nalezeny duplicitní hodnoty, funkce ALTER TABLE selže. Možnost WITH NOCHECK nemá žádný vliv při přidání omezení PRIMÁRNÍHO KLÍČE nebo JEDINEČNÉ hodnoty.
Každý primární klíč a omezení UNIQUE vygeneruje index. Počet omezení jedinečného a PRIMÁRNÍho klíče nemůže způsobit, že počet indexů v tabulce překročí 999 neclusterovaných indexů a 1 clusterovaný index. Omezení cizího klíče negenerují index automaticky. Sloupce cizího klíče se ale často používají v kritériích spojení v dotazech tím, že odpovídají sloupci nebo sloupcům v omezení cizího klíče jedné tabulky s primárním nebo jedinečným klíčovým sloupcem nebo sloupci v druhé tabulce. Index sloupců cizího klíče umožňuje databázovému stroji rychle najít související data v tabulce cizího klíče.
SQL Server 2022 (16.x) zavádí resumable operace pro přidání omezení tabulky pro primární klíč a jedinečná omezení klíče. Další informace o povolení a používání resumable ALTER TABLE ADD CONSTRAINT operací naleznete v tématu Obnovitelné přidání omezení tabulky.
Examples
Příklady najdete v tématu ALTER TABLE (Transact-SQL).