Kreiranje primarnih ključeva. Ograničenje PRIMARY KEY Sintaksa primarnog ključa

U ovom članku pokušat ćemo razmotriti sve što se tiče ključeva SQL:čemu služe kreiranje i ograničenja ključeva? Generalno: biće dosadno 😉

Plan za danas je:

U teoriji relacionih baza podataka - ključevi To su određeni entiteti kreirani da uspostave određena ograničenja koja održavaju integritet i dostupnost podataka u tablicama baze podataka.

Jednostavnim rečima, ključevi su unutra sql kreirani su da ukažu na dodatnu funkcionalnost za stupac. Bilo da se radi o jedinstvenosti ili činjenici da kolona upućuje na drugu tabelu (strani ključ).

Primarni ključ

Kolona koja mora biti jedinstvena u bazi podataka označena je primarnim ključem. Primarni ključ ili primarni ključ znači da se vrijednost stupca primarnog ključa ne može ponoviti u tablici. Dakle, ovaj ključ vam omogućava da jedinstveno identifikujete zapis u tabeli bez straha da će se vrednost kolone ponoviti. Samo primjer: recimo da imate tabelu korisnika. Ova tabela ima sljedeća polja: puno ime, godina rođenja, telefon. Kako identificirati korisnika? Ne može se vjerovati parametrima kao što su puno ime i broj telefona. Uostalom, možemo imati više korisnika ne samo s istim prezimenom, već i sa istim imenom. Broj telefona se može promijeniti s vremenom i korisnik sa telefonskim brojem možda nije onaj u našoj bazi podataka.

Zbog toga je izmišljen primarni ključ. Jednom dodijeljen jedinstveni identifikator i to je to. IN mySql na čijem primjeru izvodimo sve primjere sa terena AUTO_INCREMENT ne može se postaviti osim ako ne naznačite da je ovo primarni ključ.

Mislim da nije vredno spominjanja da polje označeno kao primarni ključ ne može biti prazno prilikom kreiranja zapisa.

Vanjski ključ ( strani ključ)

Ima li još eksterni ključ (strani ključ). Takođe se naziva referenca. Potrebno je povezati tabele.

Ako pogledate gornju sliku, strani ključ će biti polje dobavljača u tabeli obuće. Obično, kada kreirate tabelu, navedete kolonu jedinstvenih celobrojnih vrednosti. Kako smo to uradili kada smo kreirali tabelu dobavljač

Kolona dobavljač_idće biti jedinstven za svaki unos. Njegova vrijednost će se pojaviti u koloni provajdera u tabeli cipele. Predlažem da odmah pogledate primjer kako se kreira strani ključ.

Kreiranje stranog ključa

kreirajte tabele cipele(shoes_id int auto_increment primarni ključ, tekst naslova, veličina int, cijena float, count int, tip varchar(30), dobavljač int, strani ključ (dobavljač) reference dobavljača (supplier_id));

Kao što možete vidjeti u gornjem primjeru, sintaksa za kreiranje stranog ključa je prilično jednostavna. Morate dodati polje u tablicu, a zatim deklarirati ovo polje kao strani ključ i naznačiti gdje će se odnositi. U ovom slučaju polje dobavljač odnosiće se na polje dobavljač_id u tabeli dobavljač

Kompozitni ključ (kompozitni ključ)

Što se tiče kompozitnog ključa, ovo je nekoliko primarnih ključeva u tabeli. Dakle, stvorivši kompozitni ključ, jedinstvenost zapisa će se provjeriti poljima koja su kombinirana u ovom ključu.

Postoje situacije kada prilikom umetanja u tabelu morate provjeriti jedinstvenost zapisa koristeći nekoliko polja odjednom. Zbog toga je izmišljen kompozitni ključ. Na primjer, napravit ću jednostavnu tablicu sa kompozitni ključ za prikaz sintakse:

Kreirajte test tabele (polje_1 int, polje_2 tekst, polje_3 bigint, primarni ključ (polje_1, polje_3));

U gornjem primeru, dva polja su kombinovana u složeni ključ i neće biti zapisa u tabeli sa ovim identičnim poljima.

To je sve o ključevima SQL. Ovaj mali tutorijal je priprema za članak u kojem ćemo detaljno pogledati kako kombinirati tablice tako da formiraju jedinstvenu bazu podataka.

ODNOSI SE NA: SQL Server (od 2016.) Azure SQL baza podatakaAzure SQL skladište podataka Paralelno skladište podataka

Možete definirati primarni ključ u SQL Serveru 2016 korištenjem SQL Server Management Studio ili Transact-SQL. Kreiranje primarnog ključa automatski kreira odgovarajući jedinstveni klasterirani ili neklasterirani indeks.

U ovom odeljku

    Prije nego što počnete, izvršite sljedeće korake.

    Ograničenja

    Sigurnost

    Kreirajte primarni ključ koristeći:

    SQL Server Management Studio

Ograničenja

    Tablica može imati samo jedno ograničenje primarnog ključa.

    Svi stupci sa ograničenjem PRIMARY KEY ne smiju biti NOT NULL. Ako mogućnost nuliranja nije navedena, tada je zastavica NOT NULL postavljena za sve stupce s ograničenjem PRIMARY KEY.

Sigurnost

Dozvole

Kreiranje nove tablice s primarnim ključem zahtijeva dozvolu CREATE TABLE za bazu podataka i ALTER dozvolu za shemu u kojoj je tablica kreirana.

Kreiranje primarnog ključa na postojećoj tablici zahtijeva ALTER dozvolu za tablicu.

Kreiranje primarnog ključa

    U Object Exploreru kliknite desnim tasterom miša na tabelu kojoj želite da dodate jedinstveno ograničenje i izaberite Constructor.

    IN Dizajner stolova Kliknite na birač reda za stupac baze podataka koji želite definirati kao primarni ključ. Da biste odabrali više kolona, ​​pritisnite i držite tipku CTRL i kliknite na birače redova za preostale kolone.

    Desnom tipkom miša kliknite birač reda kolone i odaberite Postavite primarni ključ.

Kolona izvora ključa je identificirana simbolom primarnog ključa u odgovarajućem selektoru reda.

Ako se primarni ključ sastoji od više od jedne kolone, tada mogu postojati duple vrijednosti u jednoj koloni, ali sve kombinacije vrijednosti iz svih stupaca primarnog ključa moraju biti jedinstvene.

Kada definirate složeni ključ, redoslijed kolona u primarnom ključu je isti kao i redoslijed kolona prikazanih u tabeli. Međutim, nakon kreiranja primarnog ključa, redoslijed kolona se može promijeniti. Za više informacija pogledajte .

Kreirajte primarni ključ na postojećoj tabeli

    IN Object Explorer

    Kreirajte zahtjev.

    Izvrši. Ovaj primjer kreira primarni ključ u stupcu TransactionID.

    USE AdventureWorks2012; GO ALTER TABLE Production.TransactionHistoryArchive DODAJ OGRANIČENJE PK_TransactionHistoryArchive_TransactionID PRIMARNI KLJUČ CLUSTERED (TransactionID); GO

Kreirajte primarni ključ u novoj tabeli

    IN Object Explorer Povežite se na instancu Database Enginea.

    Na standardnoj tabli odaberite Kreirajte zahtjev.

    Kopirajte sljedeći primjer u prozor upita i kliknite na dugme Izvrši. Ovaj primjer kreira tablicu i definira primarni ključ za stupac TransactionID.

    USE AdventureWorks2012; GO CREATE TABLE Production.TransactionHistoryArchive1 (TransactionID int NOT NULL , CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARNI KLJUČ CLUSTERED (TransactionID)); GO

    Za više informacija pogledajte odjeljke i .

Predstavljam vašoj pažnji besplatni prijevod članka SQL za početnike 2. dio

Za svakog web programera je važno da bude u mogućnosti da komunicira sa bazama podataka. U drugom dijelu nastavljamo sa učenjem jezika SQL i primijeniti naše vještine na DBMS MySQL. Istražit ćemo indekse, tipove podataka i složenije upite.

Sta ti treba

Molimo pogledajte odjeljak "Šta vam treba" u prvom dijelu, koji se nalazi.

Ako želite pokrenuti ove primjere na svom serveru, učinite sljedeće:

  1. Otvorite svoju konzolu MySQL i prijavite se.
  2. Kreirajte bazu podataka "my_first_db" koristeći upit STVORITI, ako nije prethodno kreiran.
  3. Promijenite bazu pomoću operatera KORISTI.

Indeksi

Indeksi (ili ključevi) se obično koriste za poboljšanje brzine izvršavanja naredbi koje biraju podatke (npr. SELECT) sa tabela.

Oni su važan dio dobre arhitekture baze podataka; teško ih je klasificirati kao "optimizaciju". Obično se indeksi dodaju na početku, ali se mogu dodati kasnije pomoću upita ALTER TABLE.

Glavni razlozi za indeksiranje stupaca baze podataka su:

  • Skoro svaka tabela ima primarni ključ ( PRIMARY KEY), obično je ovo kolona "id".
  • Ako je kolona namijenjena za pohranjivanje jedinstvenih vrijednosti, ona mora imati jedinstveni indeks ( UNIQUE).
  • Ako vam je potrebna česta pretraga po koloni (koristeći je u rečenici GDJE), mora imati regularni indeks ( INDEX).
  • Ako se kolona koristi za povezivanje s drugom tablicom, to bi trebao biti strani ključ ako je moguće ( STRANI KLJUČ) ili običan indeks.

Primarni ključ (PRIMARY KEY)

Gotovo sve tabele imaju primarni ključ, obično cijeli broj s opcijom automatskog povećanja ( AUTO_INCREMET).

Podupisi često uzrokuju značajnu degradaciju performansi, pa ih koristite oprezno.

UNION: Kombinovanje podataka

Korištenje upita UNION, možete kombinirati rezultate višestrukih SELECT upita.

Ovaj primjer kombinira države koje počinju slovom "N" sa državama s većom populacijom:

(SELECT * FROM država WHERE naziv LIKE "n%") UNION (SELECT * FROM država WHERE stanovništvo > 10000000);

Imajte na umu da je New York velika država i počinje slovom "N". Međutim, pojavljuje se samo jednom na listi, jer duplikati se automatski uklanjaju.

Takođe ljepota zahtjeva UNION je da se mogu koristiti za kombinovanje upita prema različitim tabelama.

Na primjer, imamo tablice zaposlenika (zaposlenih), menadžera (menadžera) i kupaca (klijenti). Svaka tabela ima polje sa adresom e-pošte. Ukoliko želimo da dobijemo sve e-mail adrese u jednom zahtjevu, možemo učiniti sljedeće:

(IZABERITE e-poštu OD zaposlenih) SINDIKAT (IZABIR e-poštu OD menadžera) SINDIKAT (IZABIR e-poštu OD kupaca GDJE su pretplaćeni = 1);

Ispunjavanjem ovog zahtjeva dobićemo mailing adrese svih zaposlenih i menadžera, i to samo onih klijenata koji su prijavljeni na mailing listu.

INSERT Nastavak

Već smo razgovarali o zahtjevu INSERT u prethodnom članku. Sada kada smo pogledali indekse, možemo razgovarati o dodatnim mogućnostima upita INSERT.

INSERT ... NA AŽURIRANJE DUPLIKATA KLJUČA

Ovo je najčešće korišteno stanje. Prvo se zahtjev pokušava izvršiti INSERT, i ako zahtjev ne uspije zbog duplikata primarnog ( PRIMARY KEY) ili jedinstveno ( UNIQUE KEY), tada se zahtjev izvršava UPDATE.

Prvo napravimo probnu tabelu.

Ovo je sto za odlaganje hrane. Polje "zaliha" pohranjuje broj proizvoda dostupnih na zalihama.

Pokušajmo sada da ubacimo postojeću vrijednost u tabelu i vidimo šta će se dogoditi.

Dobili smo grešku.

Recimo da imamo novu pekaru i želimo da ažuriramo bazu podataka, ali ne znamo da li već postoji unos u bazi. Prvo možemo provjeriti postojanje zapisa, a zatim pokrenuti drugi upit za umetanje. Ili možete učiniti sve u jednom jednostavnom upitu:

Radi isto kao INSERT, ali sa jednom važnom osobinom. Ako zapis već postoji, on se briše i potom se izvršava upit INSERT, i nećemo primati nikakve poruke o grešci.

Imajte na umu, jer umetnut je potpuno novi red, polje za autoinkrement se povećava za jedan.

Ovo je način da spriječite pojavu grešaka u dupliciranju na prvom mjestu kako bi aplikacija nastavila raditi. Možda ćete morati da umetnete novi red bez štampanja ikakvih grešaka, čak i ako postoji dupliranje.

Nema grešaka ili ažuriranih linija.

Tipovi podataka

Svaka kolona u tabeli mora biti određenog tipa. Već smo koristili tipove INT, VARCHAR I DATUM, ali se na njima nije detaljnije zadržavao. Također ćemo pogledati još nekoliko tipova podataka.

Počnimo s numeričkim tipovima podataka. Dijelim ih u dvije grupe: cijele brojeve i razlomke.

Cijeli

Cjelobrojna kolona može pohraniti samo prirodne brojeve (bez decimalnog zareza). Podrazumevano mogu biti pozitivne ili negativne. Ako je opcija odabrana NEPOTPISAN, tada se mogu pohraniti samo pozitivni brojevi.

MySQL podržava 5 tipova cijelih brojeva različitih veličina i raspona:

Tipovi frakcijskih numeričkih podataka

Ovi tipovi mogu pohraniti razlomke: FLOAT, DOUBLE i DECIMAL.

FLOAT zauzima 4 bajta, DOUBLE 8 bajtova i sličan je prethodnom. DOUBLE je tačnije.

DECIMAL(M,N) ima varijabilnu preciznost. M je maksimalni broj cifara, N je broj cifara iza decimalnog zareza.

Na primjer, DECIMAL(13,4) ima 9 decimalnih mjesta i 4 decimalna mjesta.

String tipovi podataka

Iz imena možete pogoditi da mogu pohraniti nizove.

CHAR(N) može pohraniti N znakova i ima fiksnu vrijednost. Na primjer, CHAR(50) uvijek mora sadržavati 50 znakova po redu u cijeloj koloni. Maksimalna moguća vrijednost je 255 znakova

VARCHAR(N) radi isto, ali raspon može varirati. N - označava maksimalnu vrijednost. Ako je pohranjeni niz kraći od N znakova, tada će zauzimati manje prostora na tvrdom disku. Maksimalna moguća vrijednost je 65535 znakova.

Varijante tipa TEXT su pogodnije za duge nizove. TEXT ima ograničenje od 65535 znakova, MEDIUMTEXT ima ograničenje od 16,7 miliona, a LONGTEXT ima ograničenje od 4,3 milijarde znakova. MySQL ih obično skladišti u odvojenim skladištima na serveru, tako da glavna memorija bude što manja i brža.

.

Zaključak

Hvala što ste pročitali članak. SQL je važan jezik i alat u arsenalu web programera.

Primarni ključ je polje u tabeli koje jedinstveno identifikuje svaki red/zapis u tabeli baze podataka. Primarni ključevi moraju sadržavati jedinstvene vrijednosti. Kolona primarnog ključa ne može imati vrijednost.

Tabela može imati samo jedan primarni ključ, koji se može sastojati od jednog ili više polja. Kada se više polja koristi kao primarni ključ, nazivaju se složenim ključem.

Ako tabela ima primarni ključ definisan za bilo koje polje(a), onda ne možete imati dva zapisa koja imaju istu vrijednost za to polje(a).

Bilješka– Možete koristiti ove koncepte kada kreirate tabele baze podataka.

Kreiranje primarnog ključa

Ovdje je sintaksa za definiranje ID atributa kao primarnog ključa u tabeli Kupci.

CREATE TABLE CUSTOMERS(ID INT NIJE NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADRESA CHAR (25) , PLATA DECIMAL (18, 2), PRIMARNI KLJUČ (ID));

Da biste kreirali ograničenje primarnog ključa na stupcu "ID" kada tablica CUSTOMERS već postoji, koristite sljedeću SQL sintaksu:

ALTER TABLE KUPCI DODAJTE PRIMARNI KLJUČ (ID);

Bilješka

Ako koristite naredbu ALTER TABLE za dodavanje primarnog ključa, kolone primarnog ključa moraju već biti deklarirane kao da ne sadrže NULL vrijednosti (ako je tablica prva kreirana).

Da biste definirali primarni ključ na više stupaca, koristite SQL sintaksu u nastavku:

CREATE TABLE CUSTOMERS(ID INT NIJE NULL, IME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADRESA CHAR (25) , PLATA DECIMAL (18, 2), PRIMARNI KLJUČ (ID, IME));

Za kreiranje ograničenja primarnog ključa na stupcima ID i NAME kada tablica CUSTOMERS već postoji, koristite sljedeću SQL sintaksu.

ALTER TABLE KUPCI DODAJTE OGRANIČENJE PK_CUSTID PRIMARNI KLJUČ (ID, NAZIV);

Brisanje primarnog ključa

Možete obrisati ograničenja primarnog ključa iz tabele koristeći sintaksu datu u nastavku.

ALTER TABLE CUSTOMS DROP PRIMARY KEY;

Tokom procesa dizajna baze podataka donose se odluke o tome koje tabele treba da budu uključene u bazu podataka, koja imena će imati (identifikatore), koje vrste podataka će biti potrebne za pravljenje tabela i koji će korisnici imati pristup svakoj od njih. . Osim toga, da biste efikasno kreirali tabele, morate odgovoriti na sljedeća pitanja:

  • Koje vrste i veličine kolona će činiti svaku od tabela i koja imena treba izabrati za kolone tabele?
  • Koje kolone mogu sadržavati NULL vrijednost?
  • Hoće li se koristiti? ograničenja integriteta, zadane vrijednosti i pravila za stupce?
  • Da li je potrebno indeksiranje kolona, ​​koje vrste indeksa će se primijeniti na određene stupce?
  • Koje kolone će biti uključene u primarni i strani ključ.

Za kreiranje tablica u okruženju MS SQL Server koristite naredbu:

<определение_таблицы>::= CREATE TABLE [ ime_baze podataka.[vlasnik]. | vlasnik. ]table_name (<элемент_таблицы>[,...n])

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

Tipično, vlasnik tabele (dbo) je osoba koja ju je kreirala.

<Выражение>postavlja vrijednost za izračunata kolona. Izračunate kolone- ovo su virtuelne kolone, tj. nisu fizički pohranjene u tabeli i izračunavaju se na osnovu vrednosti kolona iste tabele. U izrazu za izračunata kolona mogu postojati regularna imena kolona, ​​konstante i funkcije vezane jednim ili više operatora. Podupiti ne mogu sudjelovati u takvom izrazu. Izračunate kolone može biti uključeno u SELECT klauzulu kada se specificira lista kolona koje treba vratiti kao rezultat upita. Izračunate kolone ne mogu se uključiti u strani ključ; za njih se ne koriste zadane vrijednosti. osim toga, izračunate kolone ne može učestvovati u operacijama INSERT i DELETE.

<определение_столбца>::= (ime_kolone<тип_данных>) [ [ ZADANO<выражение>] | [ IDENTITET (početak, korak) ]]] [<ограничение_столбца>][...n]]

U definiciji stupca obratite pažnju na parametar IDENTITY, koji označava da će odgovarajuća kolona biti counter column. Samo jedan stupac s ovim svojstvom može se definirati po tablici. Dodatno možete odrediti početnu vrijednost i korak povećanja. Ako ove vrijednosti nisu specificirane, obje su zadane na 1. Ako je NOT FOR REPLICATION specificirano ključnom riječi IDENTITY, server neće automatski generirati vrijednosti za tu kolonu, ali će dozvoliti umetanje proizvoljnih vrijednosti u kolona.

Korišćena ograničenja su ograničenja stupaca I ograničenja stolova. Razlika između njih je u tome ograničenje stupca odnosi se samo na određeno polje, i ograničenje tabele- na grupe od jednog ili više polja.

<ограничение_столбца>::= [ IME OGRANIČENJA ] ( [ NULL | NOT NULL ] | [ (PRIMARNI KLJUČ | JEDINSTVEN) [ CLUSTERED | NENCLUSTERED ] [ SA FILLFACTOR=fillfactor ] [ ON (ime grupe datoteka | DEFAULT ) ] ] ] [ KEY [ C ] | table_genus_name [(naziv_stupca_table_genus) ] [ NA BRISANJU ( KASKADA | BEZ AKCIJE ) ] [ NA AŽURIRANJE ( KASKADA | BEZ AKCIJE ) ] [ NIJE ZA REPLIKACIJU ]] | PROVJERI [ NIJE ZA REPLIKACIJU ](<лог_выражение>) } <ограничение_таблицы>::= ( [ (PRIMARNI KLJUČ | JEDINSTVEN ) [ CLUSTERED | NONCLUSTERED ] ((ime_kolone [,...n])) ] |STRANI KLJUČ[(naziv_kolone [,...n])] REFERENCE ime_tablice [(naziv_stupca_tablica_gen [ ,...n])] [ NA BRISANJE ( KASKADA | BEZ AKCIJE ) ] [ NA AŽURIRANJE ( KASKADA | BEZ AKCIJE ) ] | NIJE ZA REPLIKACIJU ] | PROVJERI [ NIJE ZA REPLIKACIJU ] (logički izraz) )

Razmotrimo pojedinačne parametre predstavljenih dizajna koji su povezani s ograničenjima integritet podataka. Ograničenja integriteta imaju prednost nad okidačima, pravilima i zadanim vrijednostima. TO ograničenja integriteta odnositi se ograničenje primarnog ključa PRIMARY KEY ograničenje stranog ključa STRANI KLJUČ, JEDINSTVENO ograničenje, NULL ograničenje, PROVERI ograničenje.

Ograničenje primarnog ključa (PRIMARY KEY)

Tablica obično ima kolonu ili kombinaciju kolona čije vrijednosti jedinstveno identificiraju svaki red u tablici. Ova kolona (ili kolone) se poziva primarni ključ stola i potrebno je da se osigura njegov integritet. Ako primarni ključ sadrži više od jedne kolone, tada se vrijednosti unutar jedne kolone mogu duplicirati, ali bilo koja kombinacija vrijednosti svih kolona primarni ključ mora biti jedinstven.

Tokom stvaranja primarni ključ SQL Server automatski kreira jedinstveni indeks na stupcima koji su dio primarnog ključa. Ubrzava pristup podacima ovih kolona kada se koriste primarni ključ u zahtjevima.

Tabela može imati samo jedno ograničenje PRIMARY KEY, a nijedan od stupaca uključenih u primarni ključ ne može biti NULL. Kada ga pokušavate koristiti kao primarni ključ kolona (ili grupa kolona) za koju ograničenja primarnog ključa se ne izvrše, primarni ključ neće biti kreiran, a sistem će prikazati poruku o grešci.

Budući da ograničenje PRIMARY KEY osigurava da su podaci jedinstveni, često se definira na counter columns. Kreacija ograničenja integriteta PRIMARNI KLJUČ je moguć i tokom kreiranja i kada menjanje stola. Jedan od sastanaka primarni ključ je odredba referentni integritet podaci iz nekoliko tabela. Naravno, ovo se može implementirati samo definisanjem odgovarajućih stranih ključeva u drugim tabelama.

OGRANIČENJE STRANOG KLJUČA

Ograničenje stranog ključa je glavni mehanizam za održavanje referentni integritet između tabela u relacionoj bazi podataka. Stupac podređene tablice naveden kao strani ključ u parametru FOREIGN KEY koristi se za referenciranje stupca roditeljske tablice koji se nalazi u njoj primarni ključ. Ime roditeljske tablice i njene kolone primarni ključ su specificirane u REFERENCES klauzuli. Podaci u kolonama definiranim kao strani ključ mogu imati samo iste vrijednosti kao one u stupcima koji su s njima povezani primarni ključ roditelj stol. Nije neophodno da se imena kolona podudaraju da bi se povezale podređene i roditeljske tabele. Primarni ključ se može definirati na koloni s jednim imenom, dok kolona koja je podložna ograničenju STRANI KLJUČ može imati potpuno drugačije ime. Jedini uslov je da kolone odgovaraju tipu podataka i veličini.

Primarni ključ se može referencirati ne samo kolonama u drugim tabelama, već i stupcima koji se nalaze u istoj tabeli kao i sam primarni ključ; ovo vam omogućava da kreirate rekurzivne strukture.

Strani ključ se može povezati ne samo sa primarni ključ drugi sto. Može se definirati za UNIQUE stupce druge tablice ili bilo koje druge stupce, ali tabele moraju biti u istoj bazi podataka.

Stupci stranog ključa mogu sadržavati NULL vrijednost, ali provjera ograničenja FOREIGN KEY se zanemaruje. Strani ključ se može indeksirati, tada će server brže pronaći potrebne podatke. Strani ključ je definiran i pri kreiranju i na stolovi za presvlačenje.

Ograničenje referentni integritet specificira zahtjev da za svaki zapis u podređenoj tabeli mora postojati zapis u nadređenoj tabeli. U ovom slučaju se blokira promjena vrijednosti stupca odnosa u zapisu nadređene tablice u prisustvu podređenog zapisa, kao i brisanje nadređenog zapisa (zabrana kaskadnih promjena i brisanja), što je zagarantovano zadanim postavkama. ON DELETE NO ACTION i ON UPDATE NO ACTION parametrima. Da biste omogućili kaskadne efekte, koristite parametre ON DELETE CASCADE i ON UPDATE CASCADE.