Vytváření primárních klíčů. Omezení PRIMARY KEY Syntaxe primárního klíče

V tomto článku se pokusíme zvážit vše, co souvisí s klíči v SQL: k čemu slouží vytváření a omezení klíčů? Obecně platí: bude to nuda 😉

Plán na dnešek je:

V teorii relačních databází - klíče Jedná se o určité entity vytvořené za účelem stanovení určitých omezení, která udržují integritu a dostupnost dat v databázových tabulkách.

Jednoduše řečeno, klíče jsou uvnitř sql jsou vytvořeny k označení další funkce pro sloupec. Ať už jde o jedinečnost nebo fakt, že sloupec odkazuje na jinou tabulku (cizí klíč).

Primární klíč

Sloupec, který musí být v databázi jedinečný, je označen primárním klíčem. Primární klíč nebo primární klíč znamená, že hodnotu sloupce primárního klíče nelze v tabulce opakovat. Tento klíč tedy umožňuje jednoznačně identifikovat záznam v tabulce bez obav, že se hodnota sloupce bude opakovat. Jen příklad: řekněme, že máte tabulku uživatelů. Tato tabulka má tato pole: celé jméno, rok narození, telefon. Jak identifikovat uživatele? Parametrům, jako je celé jméno a telefonní číslo, nelze důvěřovat. Můžeme mít totiž více uživatelů nejen se stejným příjmením, ale i se stejným křestním jménem. Telefonní číslo se může v průběhu času měnit a uživatel s telefonním číslem nemusí být tím, kdo je v naší databázi.

To je důvod, proč byl vynalezen primární klíč. Po přiřazení jedinečného identifikátoru a je to. V mySql na jehož příkladu provádíme všechny příklady z oboru AUTO_INCREMENT nelze nastavit, pokud neuvedete, že se jedná o primární klíč.

Myslím, že nemá cenu zmiňovat, že pole označené jako primární klíč nemůže být při vytváření záznamu prázdné.

Cizí klíč ( cizí klíč)

Je jich víc cizí klíč (cizí klíč). Říká se tomu také reference. Je potřeba propojit tabulky dohromady.

Pokud se podíváte na obrázek výše, cizím klíčem bude pole dodavatele v tabulce bot. Při vytváření tabulky obvykle zadáváte sloupec jedinečných celočíselných hodnot. Jak jsme to udělali, když jsme vytvářeli tabulku dodavatele

Sloupec id_dodavatele bude jedinečný pro každý záznam. Jeho hodnota se objeví ve sloupci dodavatele v tabulce obuv. Navrhuji okamžitě se podívat na příklad, jak se vytváří cizí klíč.

Vytvoření cizího klíče

vytvořit table shoes(shoes_id int auto_increment primární klíč, text nadpisu, velikost int, cena float, count int, typ varchar(30), dodavatel int, cizí klíč (dodavatel) reference dodavatel (id_dodavatele));

Jak můžete vidět na příkladu výše, syntaxe pro vytvoření cizího klíče je poměrně jednoduchá. Musíte přidat pole do tabulky a poté toto pole deklarovat jako cizí klíč a uvést, kam bude odkazovat. V tomto případě pole dodavatele bude odkazovat na pole id_dodavatele v tabulce dodavatele

Složený klíč (složený klíč)

Pokud jde o složený klíč, jedná se o několik primárních klíčů v tabulce. Tedy mít vytvořen kompozitní klíč, bude jedinečnost záznamu kontrolována pomocí polí, která jsou sloučena do tohoto klíče.

Jsou situace, kdy při vkládání do tabulky potřebujete zkontrolovat jedinečnost záznamu pomocí několika polí najednou. To je důvod, proč byl vynalezen složený klíč. Vytvořím například jednoduchou tabulku s kompozitní klíč pro zobrazení syntaxe:

Vytvořit test tabulky (pole_1 int, pole_2 text, pole_3 bigint, primární klíč (pole_1, pole_3));

Ve výše uvedeném příkladu jsou dvě pole sloučena do složeného klíče a v tabulce nebudou žádné záznamy s těmito identickými poli.

To je vše o klíčích SQL. Tento malý návod je přípravou na článek, kde se podrobně podíváme na to, jak kombinovat tabulky tak, aby tvořily jednu databázi.

PLATÍ PRO: SQL Server (od roku 2016)Azure SQL DatabaseAzure SQL Data WarehouseParalelní datový sklad

Primární klíč v SQL Server 2016 můžete definovat pomocí SQL Server Management Studio nebo Transact-SQL. Vytvořením primárního klíče se automaticky vytvoří odpovídající jedinečný seskupený nebo neshlukovaný index.

V této sekci

    Než začnete, proveďte následující kroky.

    Omezení

    Bezpečnost

    Vytvořte primární klíč pomocí:

    SQL Server Management Studio

Omezení

    Tabulka může mít pouze jedno omezení primárního klíče.

    Všechny sloupce s omezením PRIMARY KEY nesmí být NULL. Pokud není zadána možnost null, pak se pro všechny sloupce s omezením PRIMARY KEY nastaví příznak NOT NULL.

Bezpečnost

Oprávnění

Vytvoření nové tabulky s primárním klíčem vyžaduje oprávnění CREATE TABLE pro databázi a oprávnění ALTER pro schéma, ve kterém je tabulka vytvořena.

Vytvoření primárního klíče na existující tabulce vyžaduje oprávnění ALTER pro tabulku.

Vytvoření primárního klíče

    V Průzkumníku objektů klikněte pravým tlačítkem na tabulku, do které chcete přidat jedinečné omezení, a vyberte Konstruktér.

    V Návrhář stolů Klepněte na výběr řádku pro sloupec databáze, který chcete definovat jako primární klíč. Chcete-li vybrat více sloupců, stiskněte a podržte klávesu CTRL a klikněte na voliče řádků pro zbývající sloupce.

    Klepněte pravým tlačítkem myši na výběr řádku sloupce a vyberte Nastavit primární klíč.

Sloupec zdroje klíče je identifikován symbolem primárního klíče v odpovídajícím selektoru řádku.

Pokud se primární klíč skládá z více než jednoho sloupce, mohou být v jednom sloupci duplicitní hodnoty, ale všechny kombinace hodnot ze všech sloupců primárního klíče musí být jedinečné.

Když definujete složený klíč, pořadí sloupců v primárním klíči je stejné jako pořadí sloupců v tabulce. Po vytvoření primárního klíče však lze změnit pořadí sloupců. Další informace viz .

Vytvořte primární klíč na existující tabulce

    V Průzkumník objektů

    Vytvořte žádost.

    Vykonat. Tento příklad vytvoří primární klíč ve sloupci TransactionID.

    POUŽÍVEJTE AdventureWorks2012; JÍT ALTER TABLE Production.TransactionHistoryArchive ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMÁRNÍ KLÍČ SLUSTROVANÝ (TransactionID); JÍT

Vytvořte primární klíč v nové tabulce

    V Průzkumník objektů Připojte se k instanci Database Engine.

    Na standardním panelu vyberte Vytvořte žádost.

    Zkopírujte následující příklad do okna dotazu a klikněte na tlačítko Vykonat. Tento příklad vytvoří tabulku a definuje primární klíč pro sloupec TransactionID.

    POUŽÍVEJTE AdventureWorks2012; JÍT CREATE TABLE Production.TransactionHistoryArchive1 (TransactionID int NOT NULL , CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMÁRNÍ KLÍČ V CLUSTERU (TransactionID)); JÍT

    Další informace naleznete v částech , a .

Předkládám vaší pozornosti volný překlad článku SQL pro začátečníky 2. část

Pro každého webového vývojáře je důležité, aby byl schopen pracovat s databázemi. Ve druhé části pokračujeme ve výuce jazyka SQL a aplikovat naše dovednosti na DBMS MySQL. Prozkoumáme indexy, datové typy a složitější dotazy.

co potřebuješ

Přečtěte si prosím část „Co potřebujete“ v první části, která se nachází.

Pokud chcete tyto příklady spustit na svém serveru, postupujte takto:

  1. Otevřete konzoli MySQL a přihlaste se.
  2. Vytvořte databázi "my_first_db" pomocí dotazu VYTVOŘIT, pokud nebyl vytvořen dříve.
  3. Změňte základnu pomocí operátoru POUŽITÍ.

Indexy

Indexy (nebo klíče) se běžně používají ke zlepšení rychlosti provádění příkazů, které vybírají data (např VYBRAT) z tabulek.

Jsou důležitou součástí dobré databázové architektury, je těžké je klasifikovat jako „optimalizaci“. Indexy se obvykle přidávají zpočátku, ale lze je přidat později pomocí dotazu ALTER TABULKA.

Hlavní důvody pro indexování databázových sloupců jsou:

  • Téměř každá tabulka má primární klíč ( PRIMÁRNÍ KLÍČ), obvykle se jedná o sloupec „id“.
  • Pokud je sloupec určen k ukládání jedinečných hodnot, musí mít jedinečný index ( UNIKÁTNÍ).
  • Pokud potřebujete časté vyhledávání ve sloupci (použijte jej ve větě KDE), musí mít pravidelný index ( INDEX).
  • Pokud se sloupec používá ke spojení s jinou tabulkou, měl by to být pokud možno cizí klíč ( CIZÍ KLÍČ) nebo běžný index.

Primární klíč (PRIMARY KEY)

Téměř všechny tabulky mají primární klíč, obvykle celé číslo s možností automatického zvýšení ( AUTO_INCREMET).

Poddotazy často způsobují výrazné snížení výkonu, proto je používejte opatrně.

UNION: Kombinování dat

Pomocí dotazu UNIE, můžete kombinovat výsledky více dotazů SELECT.

Tento příklad kombinuje stavy začínající písmenem „N“ se státy s větší populací:

(SELECT * FROM uvádí WHERE jméno LIKE "n%") UNION (SELECT * FROM uvádí WHERE populace > 10000000);

Upozorňujeme, že New York je velký stát a začíná písmenem „N“. V seznamu se však objeví pouze jednou, protože duplikáty jsou automaticky odstraněny.

Také krása žádostí UNIE je, že je lze použít ke kombinaci dotazů proti různým tabulkám.

Máme například tabulky zaměstnanci (zaměstnanci), manažeři (manažeři) a zákazníci (klienti). Každá tabulka má pole s e-mailovou adresou. Pokud chceme získat všechny e-mailové adresy v jedné žádosti, můžeme provést následující:

(SELECT email FROM zaměstnanců) UNION (SELECT email FROM manažerů) UNION (SELECT email FROM zákazníků WHERE přihlášených = 1);

Vyplněním tohoto požadavku obdržíme poštovní adresy všech zaměstnanců a manažerů a pouze těch klientů, kteří jsou přihlášeni do seznamu adresátů.

INSERT Pokračování

O žádosti jsme již mluvili VLOŽIT v předchozím článku. Nyní, když jsme se podívali na indexy, můžeme mluvit o dalších možnostech dotazů VLOŽIT.

VLOŽTE ... PŘI AKTUALIZACI DUPLIKÁTNÍHO KLÍČE

Toto je nejčastěji používaná podmínka. Nejprve se požadavek pokusí vykonat VLOŽIT a pokud požadavek selže z důvodu duplicitního primárního ( PRIMÁRNÍ KLÍČ) nebo jedinečný ( UNIKÁTNÍ KLÍČ), pak se požadavek provede AKTUALIZOVAT.

Nejprve vytvoříme testovací tabulku.

Jedná se o stolek na uskladnění potravin. Pole "skladem" ukládá počet produktů dostupných na skladě.

Nyní zkusme vložit existující hodnotu do tabulky a uvidíme, co se stane.

Obdrželi jsme chybu.

Řekněme, že máme novou pekárnu a chceme aktualizovat databázi, ale nevíme, zda v databázi již existuje záznam. Nejprve můžeme zkontrolovat existenci záznamu a poté spustit další vkládací dotaz. Nebo můžete vše udělat jedním jednoduchým dotazem:

Funguje stejně jako VLOŽIT, ale s jednou důležitou funkcí. Pokud záznam již existuje, je smazán a poté je proveden dotaz VLOŽIT a neobdržíme žádné chybové zprávy.

Vezměte prosím na vědomí, protože Vloží se zcela nový řádek, pole autoinkrementace se zvýší o jedna.

To je způsob, jak zabránit chybám duplikace v první řadě, aby aplikace běžela. Možná budete muset vložit nový řádek bez vytištění chyb, i když dojde k duplikaci.

Nejsou žádné chyby ani aktualizované řádky.

Typy dat

Každý sloupec v tabulce musí být určitého typu. Typy jsme již použili INT, VARCHAR A DATUM, ale podrobně se jimi nezabýval. Podíváme se také na několik dalších datových typů.

Začněme číselnými datovými typy. Dělím je do dvou skupin: Celá čísla a zlomky.

Celý

Celočíselný sloupec může ukládat pouze přirozená čísla (bez desetinné čárky). Ve výchozím nastavení mohou být kladné nebo záporné. Pokud je vybrána možnost NEPODEPSANÝ, pak lze uložit pouze kladná čísla.

MySQL podporuje 5 typů celých čísel různých velikostí a rozsahů:

Zlomkové číselné datové typy

Tyto typy mohou ukládat zlomková čísla: FLOAT, DOUBLE a DECIMAL.

FLOAT zabírá 4 bajty, DOUBLE 8 bajtů a je podobný předchozímu. DOUBLE je přesnější.

DECIMAL(M,N) má proměnnou přesnost. M je maximální počet číslic, N je počet číslic za desetinnou čárkou.

Například DECIMAL(13,4) má 9 desetinných míst a 4 desetinná místa.

Řetězcové datové typy

Podle názvu můžete odhadnout, že mohou ukládat řetězce.

CHAR(N) může uložit N znaků a má pevnou hodnotu. Například CHAR(50) musí vždy obsahovat 50 znaků na řádek v celém sloupci. Maximální možná hodnota je 255 znaků

VARCHAR(N) funguje stejně, ale rozsah se může lišit. N - označuje maximální hodnotu. Pokud je uložený řetězec kratší než N znaků, zabere méně místa na pevném disku. Maximální možná hodnota je 65535 znaků.

Pro dlouhé řetězce jsou vhodnější varianty typu TEXT. TEXT má limit 65535 znaků, MEDIUMTEXT má limit 16,7 milionů a LONGTEXT má limit 4,3 miliardy znaků. MySQL je obvykle ukládá do samostatných úložišť na serveru, aby bylo hlavní úložiště co nejmenší a nejrychlejší.

.

Závěr

Děkuji za přečtení článku. SQL je důležitý jazyk a nástroj v arzenálu webových vývojářů.

Primární klíč je pole v tabulce, které jednoznačně identifikuje každý řádek/záznam v databázové tabulce. Primární klíče musí obsahovat jedinečné hodnoty. Sloupec primárního klíče nemůže mít hodnotu.

Tabulka může mít pouze jeden primární klíč, který se může skládat z jednoho nebo více polí. Pokud je jako primární klíč použito více polí, nazývají se složený klíč.

Pokud má tabulka primární klíč definovaný v libovolném poli, nemůžete mít dva záznamy se stejnou hodnotou pro tato pole.

Poznámka– Tyto koncepty můžete použít při vytváření databázových tabulek.

Vytvoření primárního klíče

Zde je syntaxe pro definování atributu ID jako primárního klíče v tabulce Zákazníci.

VYTVOŘIT TABULKU ZÁKAZNÍCI(ID INT NENÍ NULL, JMÉNO VARCHAR (20) NENÍ NULL, VĚK INT NENÍ NULL, ZNAK ADRESY (25) , PLAT DESETINNÉ (18, 2), PRIMÁRNÍ KLÍČ (ID));

Chcete-li vytvořit omezení primárního klíče ve sloupci "ID", když tabulka CUSTOMERS již existuje, použijte následující syntaxi SQL:

ZÁKAZNÍCI ALTER TABLE PŘIDAT PRIMÁRNÍ KLÍČ (ID);

Poznámka

Pokud k přidání primárního klíče použijete příkaz ALTER TABLE, sloupce primárního klíče již musí být deklarovány jako neobsahující hodnoty NULL (pokud byla tabulka vytvořena jako první).

Chcete-li definovat primární klíč ve více sloupcích, použijte syntaxi SQL níže:

VYTVOŘIT TABULKU ZÁKAZNÍCI(ID INT NENÍ NULL, JMÉNO VARCHAR (20) NENÍ NULL, VĚK INT NENÍ NULL, ZNAK ADRESY (25) , PLAT DESETINNÉ (18, 2), PRIMÁRNÍ KLÍČ (ID, JMÉNO));

Chcete-li vytvořit omezení primárního klíče pro sloupce ID a NAME, když již tabulka CUSTOMERS existuje, použijte následující syntaxi SQL.

ALTER TABLE ZÁKAZNÍCI PŘIDAT OMEZENÍ PK_CUSTID PRIMÁRNÍ KLÍČ (ID, JMÉNO);

Smazání primárního klíče

Omezení primárního klíče můžete z tabulky vymazat pomocí syntaxe uvedené níže.

ZÁKAZNÍCI ALTER TABLE DROP PRIMÁRNÍ KLÍČ;

Během procesu návrhu databáze se rozhoduje o tom, které tabulky by měly být zahrnuty do databáze, jaké budou mít názvy (identifikátory), jaké typy dat budou potřebné k vytvoření tabulek a jací uživatelé budou mít ke každé z nich přístup. . Kromě toho, abyste mohli efektivně vytvářet tabulky, musíte odpovědět na následující otázky:

  • Jaký typ a velikost sloupců bude tvořit každou z tabulek a jaké názvy byste měli zvolit pro sloupce tabulky?
  • Které sloupce mohou obsahovat hodnotu NULL?
  • Budou použity? integritní omezení, výchozí hodnoty a pravidla pro sloupce?
  • Je nutné indexování sloupců, jaké typy indexů se použijí na konkrétní sloupce?
  • Které sloupce budou zahrnuty do primárního a cizího klíče.

Chcete-li vytvořit tabulky v prostředí MS SQL Server, použijte příkaz:

<определение_таблицы>::= CREATE TABLE [ název_databáze.[vlastník].<элемент_таблицы>| majitel. ]název_tabulky (

<элемент_таблицы> ::= {<определение_столбца>} | <имя_столбца>[,...n])<выражение> | <ограничение_таблицы>

AS

<Выражение>Vlastníkem tabulky (dbo) je obvykle osoba, která ji vytvořila. nastavuje hodnotu pro. vypočítaný sloupec Vypočítané sloupce nastavuje hodnotu pro- jedná se o virtuální sloupce, to znamená, že nejsou fyzicky uloženy v tabulce a počítají se pomocí hodnot sloupců téže tabulky. Ve výrazu pro vypočítaný sloupec mohou existovat běžné názvy sloupců, konstanty a funkce vázané jedním nebo více operátory. Poddotazy se nemohou účastnit takového výrazu. vypočítaný sloupec lze zahrnout do klauzule SELECT při zadávání seznamu sloupců, které mají být vráceny jako výsledek dotazu. nelze zahrnout do cizího klíče; výchozí hodnoty se pro ně nepoužívají. Kromě, vypočítané sloupce

<определение_столбца>nemůže se účastnit operací INSERT a DELETE.<тип_данных>::= ( název_sloupce<выражение>) [ [ VÝCHOZÍ<ограничение_столбца>] | [ IDENTITA (začátek, krok) ]]] [

][...n]] V definici sloupce věnujte pozornost parametru IDENTITY, který udává, že odpovídající sloupec budečítačový sloupec

. Pro každou tabulku lze definovat pouze jeden sloupec s touto vlastností. Navíc můžete zadat počáteční hodnotu a krok přírůstku. Pokud tyto hodnoty nejsou zadány, obě výchozí hodnoty jsou 1. Pokud je s klíčovým slovem IDENTITY zadáno NOT FOR REPLICATION, server nebude automaticky generovat hodnoty pro tento sloupec, ale umožní vložení libovolných hodnot do sloupec. Používaná omezení jsou A omezení sloupců. Rozdíl mezi nimi je ten omezení sloupce platí pouze pro určitý obor a omezení tabulky- do skupin jednoho nebo více polí.

<ограничение_столбца>::= [ CONSTRAINT constraintname ] ( [ NULL | NOT NULL ] | [ (PRIMÁRNÍ KLÍČ | UNIKÁTNÍ ) [ KLUSTEROVANÝ | NEZAHRNUTÝ ] [ WITH FILLFACTOR=fillfactor ] [ ON (název skupiny souborů | VÝCHOZÍ ) ] ] ] | [ [] CIZÍ KLÍČ název_tabulky [(název_sloupce_gen_tabulky) ] [ PŘI VYMAZÁNÍ ( KASKÁDA | ŽÁDNÁ AKCE ) ] [ PŘI AKTUALIZACI ( KASKÁDA | ŽÁDNÁ AKCE ) ] [ NENÍ K REPLIKACI ]] KONTROLA [ NENÍ K REPLIKACI ]( |<лог_выражение>) } <ограничение_таблицы>::= ( [ (PRIMÁRNÍ KLÍČ | UNIKÁTNÍ ) [ SESKUPOVANÝ | NEZAHRNUTÝ ] ((název_sloupce [,...n])) ] |CIZÍ KLÍČ[(název_sloupce [,...n])] REFERENCE název_tabulky [(název_sloupce gen_tabulky [ ,...n])] [ ON DELETE ( CASCADE | NO ACTION ) ] [ ON UPDATE ( CASCADE | NO ACTION ) ] CHECK [ NOT FOR REPLICATION ] (logický výraz) |.

Uvažujme jednotlivé parametry prezentovaných konstrukcí spojené s omezeními integrita dat. Omezení integrity mají přednost před spouštěči, pravidly a výchozími hodnotami. NA integritní omezení zahrnout omezení primárního klíče PRIMÁRNÍ KLÍČ omezení cizího klíče CIZÍ KLÍČ, omezení UNIQUE, omezení NULL, omezení CHECK.

Omezení primárního klíče (PRIMARY KEY)

Tabulka obvykle obsahuje sloupec nebo kombinaci sloupců, jejichž hodnoty jedinečně identifikují každý řádek v tabulce. Tento sloupec (nebo sloupce) se nazývá primární klíč tabulky a je potřeba k zajištění její integrity. Pokud primární klíč obsahuje více než jeden sloupec, mohou být hodnoty v jednom sloupci duplikovány, ale jakákoli kombinace hodnot všech sloupců primární klíč musí být jedinečný.

Při tvorbě primární klíč SQL Server automaticky vytvoří jedinečný index na sloupcích, které jsou součástí primárního klíče. Při použití urychluje přístup k datům těchto sloupců primární klíč v žádostech.

Tabulka může mít pouze jedno omezení PRIMARY KEY a žádný ze sloupců zahrnutých v primárním klíči nemůže mít hodnotu NULL. Při pokusu o použití jako primární klíč sloupec (nebo skupina sloupců), pro který omezení primárního klíče se neprovedou, nevytvoří se primární klíč a systém zobrazí chybovou zprávu.

Protože omezení PRIMARY KEY zajišťuje, že data jsou jedinečná, je často definováno jako čítačové sloupce. Stvoření integritní omezení PRIMÁRNÍ KLÍČ je možný jak při vytváření, tak při vytváření výměna stolu. Jedna ze schůzek primární klíč je ustanovení referenční integrita data z několika tabulek. To lze samozřejmě implementovat pouze definováním odpovídajících cizích klíčů v jiných tabulkách.

OMEZENÍ ZAHRANIČNÍHO KLÍČE

Omezení cizího klíče je hlavním mechanismem udržování referenční integrita mezi tabulkami v relační databázi. Podřízený sloupec tabulky zadaný jako cizí klíč v parametru FOREIGN KEY se používá k odkazování na nadřazený sloupec tabulky, který se v něm nachází. primární klíč. Název nadřazené tabulky a její sloupce primární klíč jsou uvedeny v klauzuli REFERENCES. Data ve sloupcích definovaných jako cizí klíč mohou mít pouze stejné hodnoty jako ty ve sloupcích, které jsou k nim přiřazeny primární klíč rodičovský stůl. K propojení podřízených a nadřazených tabulek není nutné, aby se názvy sloupců shodovaly. Primární klíč lze definovat pro sloupec s jedním názvem, zatímco sloupec, který podléhá omezení FOREIGN KEY, může mít zcela jiný název. Jediným požadavkem je, aby sloupce odpovídaly datovému typu a velikosti.

Na primární klíč mohou odkazovat nejen sloupce v jiných tabulkách, ale také sloupce umístěné ve stejné tabulce jako samotný primární klíč; to vám umožňuje vytvářet rekurzivní struktury.

Cizí klíč může být spojen nejen s primární klíč další stůl. Může být definován pro UNIQUE sloupce druhé tabulky nebo jakékoli jiné sloupce, ale tabulky musí být ve stejné databázi.

Sloupce cizího klíče mohou obsahovat hodnotu NULL, ale kontrola omezení FOREIGN KEY je ignorována. Cizí klíč lze indexovat, server pak rychleji vyhledá potřebná data. Cizí klíč je definován jak při vytváření, tak při přebalovací pulty.

Omezení referenční integrita určuje požadavek, že pro každý záznam v podřízené tabulce musí existovat záznam v nadřazené tabulce. V tomto případě je zablokována změna hodnoty sloupce vztahu v záznamu nadřazené tabulky za přítomnosti podřízeného záznamu, stejně jako smazání nadřazeného záznamu (zákaz kaskádových změn a mazání), což je zaručeno ve výchozím nastavení. ON DELETE NO ACTION a ON UPDATE NO ACTION parametry. Chcete-li povolit kaskádové efekty, použijte parametry ON DELETE CASCADE a ON UPDATE CASCADE.