SQL FOREIGN KEY: Cum se creează în SQL Server cu exemplu
Ce este o CHEIE STRĂINĂ?
A Cheie externă oferă o modalitate de a impune integritatea referenţială în SQL Server. Cu cuvinte simple, cheia străină asigură că valorile dintr-un tabel trebuie să fie prezente într-un alt tabel.
Reguli pentru CHEIA STRĂINĂ
- NULL este permis în cheia externă SQL.
- Tabelul la care se face referire se numește tabelul părinte
- Tabelul cu cheia externă în SQL se numește Child Table.
- Cheia externă SQL din tabelul copil face referire la cheia primară din tabelul părinte.
- Această relație părinte-copil impune regula cunoscută sub numele de „referențial Integrity. "
Exemplul de mai jos cheie străină în SQL cu diagramă rezumă toate punctele de mai sus pentru CHEIA străină

Cum se creează CHEIA străină în SQL
Putem crea un Cheie externă în SQL server în 2 de moduri:
- SQL Server Management Studio
- T-SQL
SQL Server Management Studio
Masa pentru părinți: Să spunem, avem un tabel Parent existent ca „Curs”. Course_ID și Course_name sunt două coloane cu Course_Id ca cheie primară.
Masa pentru copii: Trebuie să creăm al doilea tabel ca un tabel copil. „Course_ID” și „Course_Strength” ca două coloane. Cu toate acestea, „Course_ID” va fi cheia externă.
Pas 1) Faceți clic dreapta pe Tables>New> Table...
Pas 2) Introduceți numele a două coloane ca „Course_ID” și „Course_Strength”. Faceți clic dreapta pe coloana „Course_Id”. Acum faceți clic pe Relație.
Pas 3) In „Relație cheie străină,' Faceți clic 'Adăuga'
Pas 4) În „Spec. tabel și coloane”, faceți clic pe pictograma „…”.
Pas 5) Selectați „Tabel cu chei primare” ca „CURS”, iar noul tabel este creat acum ca „Tabel cu chei străine” din meniul drop-down.
Pas 6) „Tabelul cheii primare” – Selectați coloana „Course_Id” ca coloana „Tabelul cheilor primare”.
„Foreign Key Table” - Selectați coloana „Course_Id” ca coloana „Foreign Key Table”. Faceți clic pe OK.
Pas 7) Faceţi clic pe Adăugaţi.
Pas 8) Dați numele tabelului ca „Course_Strength” și faceți clic pe OK.
Rezultat: Am stabilit relația părinte-copil între 'Curs' și „Forța_cursului”.
T-SQL: Creați un tabel Părinte-copil folosind T-SQL
Masa pentru părinți: Reconsiderați, avem un tabel Parent existent cu numele tabelului „Curs”.
Course_ID și Course_name sunt două coloane cu Course_Id ca cheie primară.
Masa pentru copii: Trebuie să creăm al doilea tabel ca tabel copil cu numele „Course_Strength_TSQL”.
„Course_ID” și „Course_Strength” ca două coloane pentru tabelul copil Course_Strength_TSQL.' Cu toate acestea, „Course_ID” va fi cheia externă.
Mai jos este sintaxa pentru a crea un tabel cu FOREIGN KEY
Sintaxă:
CREATE TABLE childTable ( column_1 datatype [ NULL |NOT NULL ], column_2 datatype [ NULL |NOT NULL ], ... CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n) [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] );
Iată o descriere a parametrilor de mai sus:
- childTable este numele tabelului care urmează să fie creat.
- coloana_1, coloana_2- coloanele care urmează să fie adăugate la tabel.
- fkey_name- numele constrângerii cheii străine care trebuie creată.
- child_column1, child_column2...child_column_n- numele coloanelor chidTable pentru a face referire la cheia primară din parentTable.
- parentTable- numele tabelului părinte a cărui cheie trebuie să fie referită în tabelul copil.
- parent_column1, parent_column2, … parent_column3- coloanele care formează cheia primară a tabelului părinte.
- ON DELETE. Un parametru opțional. Specifică ce se întâmplă cu datele copil după ștergerea datelor părinte. Unele dintre valorile pentru acest parametru includ NO ACTION, SET NULL, CASCADE sau SET DEFAULT.
- ON UPDATE- Un parametru opțional. Specifică ce se întâmplă cu datele copilului după actualizarea datelor părinte. Unele dintre valorile pentru acest parametru includ NO ACTION, SET NULL, CASCADE sau SET DEFAULT.
- NO ACTION - folosit împreună cu ON DELETE și ON UPDATE. Înseamnă că nu se va întâmpla nimic cu datele copilului după actualizarea sau ștergerea datelor părinte.
- CASCADE- folosit împreună cu ON DELETE și ON UPDATE. Datele copilului vor fi fie șterse, fie actualizate după ce datele părintelui au fost șterse sau actualizate.
- SET NULL- folosit împreună cu ON DELETE și ON UPDATE. Copilul va fi setat la null după ce datele părintelui au fost actualizate sau șterse.
- SET DEFAULT- folosit împreună cu ON DELETE și ON UPDATE. Datele copil vor fi setate la valorile implicite după o actualizare sau ștergere a datelor părinte.
Să vedem o cheie străină în exemplul SQL pentru a crea un tabel cu o coloană ca CHEIE străină:
Exemplu de cheie străină în SQL
Solicitare:
CREATE TABLE Course_Strength_TSQL ( Course_ID Int, Course_Strength Varchar(20) CONSTRAINT FK FOREIGN KEY (Course_ID) REFERENCES COURSE (Course_ID) )
Pas 1) Rulați interogarea făcând clic pe executare.
Rezultat: Am stabilit relația părinte-copil între 'Curs' și „Puterea_cursului_TSQL”.
Folosind ALTER TABLE
Acum vom învăța cum să folosim cheia externă în SQL și să adăugăm cheia externă în serverul SQL folosind instrucțiunea ALTER TABLE, vom folosi sintaxa de mai jos:
ALTER TABLE childTable ADD CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);
Iată o descriere a parametrilor utilizați mai sus:
- childTable este numele tabelului care urmează să fie creat.
- coloana_1, coloana_2- coloanele care urmează să fie adăugate la tabel.
- fkey_name- numele constrângerii cheii străine care trebuie creată.
- child_column1, child_column2...child_column_n- numele coloanelor chidTable pentru a face referire la cheia primară din parentTable.
- parentTable- numele tabelului părinte a cărui cheie trebuie să fie referită în tabelul copil.
- parent_column1, parent_column2, … parent_column3- coloanele care formează cheia primară a tabelului părinte.
Exemplu de modificare a tabelului de adăugare a cheii externe:
ALTER TABLE department ADD CONSTRAINT fkey_student_admission FOREIGN KEY (admission) REFERENCES students (admission);
Am creat o cheie străină numită fkey_student_admission pe tabelul departamentului. Această cheie străină face referire la coloana de admitere a tabelului studenților.
Exemplu de interogare FOREIGN KEY
Mai întâi, să vedem datele noastre din tabelul parental, CURS.
Solicitare:
SELECT * from COURSE;
Acum să inserăm un rând în tabelul Child: „Puterea_cursului_TSQL”.
Vom încerca să inserăm două tipuri de rânduri
- Primul tip, pentru care Course_Id în tabelul copil va exista în Course_Id din tabelul părinte. adică Course_Id = 1 și 2
- Al doilea tip, pentru care Course_Id în tabelul copil nu există în Course_Id din tabelul Parent. adică Course_Id = 5
Solicitare:
Insert into COURSE_STRENGTH values (1,'SQL'); Insert into COURSE_STRENGTH values (2,'Python'); Insert into COURSE_STRENGTH values (5,'PERL');
Rezultat: Să rulăm împreună interogarea pentru a vedea tabelul nostru părinte și copil
Rândul cu Course_ID 1 și 2 există în tabelul Course_strength. În timp ce, Course_ID 5 este o excepție.
Rezumat
- Fiecare valoare a cheii externe trebuie să facă parte din Cheia principala a altor tabele.
- MySQL Cheia externă poate face referire la o altă coloană din același tabel. Această referință este cunoscută ca auto-referință.
- SQL Foreign Key Constraint: este folosit pentru a securiza legăturile dintre tabele și datele nevalide care urmează să fie inserate în coloana Foreign Key.
- Puteți crea o cheie externă folosind Creare tabel, Modificare tabel sau SQL Server Management Studio.
- Iată diferența dintre cheia principală și cheia externă: Click aici