cheie străină SQL Server
rezumat: în acest tutorial, veți învăța cum să utilizați constrângerea cheie străină SQL Server pentru a impune o legătură între datele din două tabele.
Introducere în SQL Server foreign key constraint
se ia în Considerare următoarele vendor_groups
și vendors
tabele
Fiecare furnizor aparține unui furnizor grup și fiecare furnizor grup poate avea zero sau mai mulți furnizori. Relația dintre tabelele vendor_groups
și vendors
este una-la-multe.,
pentru fiecare rând din tabelul vendors
, puteți găsi întotdeauna un rând corespunzător în tabelul vendor_groups
.
cu toate Acestea, cu curent tabele de configurare, puteți introduce un rând în vendors
masă fără un rând corespunzătoare în vendor_groups
masă. În mod similar, puteți șterge, de asemenea, un rând în vendor_groups
masă fără actualizarea sau ștergerea rândurile corespunzătoare în vendors
masa care rezultă în orfan rânduri în vendors
masă.,
Pentru a asigura legătura între date în vendor_groups
și vendors
tabele, aveți nevoie pentru a stabili o cheie externă în vendors
masă.
o cheie străină este o coloană sau un grup de coloane dintr-un tabel care identifică în mod unic un rând dintr-un alt tabel (sau același tabel în caz de auto-referință).
pentru a crea o cheie străină, utilizați constrângerea FOREIGN KEY
.,
următoarele afirmații drop vendors
masă și recrea-l cu un FOREIGN KEY
constrângere:
vendor_groups
masa acum se numește tabelul părinte care este masa la care restricție de cheie externă referințe. Tabelul vendors
se numește tabelul copil care este tabelul la care se aplică constrângerea cheie străină.,
În declarația de mai sus, următoarea clauză creează un FOREIGN KEY
constraint nume fk_group
link group_id
în vendors
tabelul group_id
în vendor_groups
tabel:
SQL Server restricție de CHEIE EXTERNĂ sintaxa
general sintaxa pentru crearea unui FOREIGN KEY
constrângere este după cum urmează:
Să examinăm această sintaxă în detaliu.,
Mai întâi, specificați FOREIGN KEY
nume de constrângere după CONSTRAINT
cuvânt cheie. Constrângerea numele este opțional, prin urmare, este posibil să se definească un FOREIGN KEY
constrângere, după cum urmează:
În acest caz, SQL Server va genera automat un nume pentru FOREIGN KEY
constrângere.
În al doilea rând, specificați o listă de coloane cheie străine separate prin virgulă închise de paranteze după cuvântul cheie FOREIGN KEY
.,în al treilea rând, specificați numele tabelului părinte la care se referă cheia străină și o listă de coloane separate prin virgulă care are o legătură cu coloana din tabelul copil.
SQL Server restricție de CHEIE EXTERNĂ exemplu
în Primul rând, introduce câteva rânduri în vendor_groups
tabel:
în al Doilea rând, se introduce un nou furnizor cu un furnizor de grup în vendors
tabel:
Code language: SQL (Structured Query Language) (sql)
declarația a lucrat cum era de așteptat.,
în al Treilea rând, încercați să introduceți un nou furnizor al căror furnizor grup nu există în vendor_groups
tabel:
Code language: SQL (Structured Query Language) (sql)
SQL Server emis următoarea eroare:
În acest exemplu, din cauza FOREIGN KEY
constrângere, SQL Server respins introduce și a emis o eroare.
acțiuni referențiale
constrângerea cheii externe asigură integritatea referențială. Aceasta înseamnă că puteți introduce un rând în tabelul copil numai dacă există un rând corespunzător în tabelul părinte.,
în Plus, restricție de cheie externă vă permite să definiți referențială acțiuni atunci când rand în tabela părinte este actualizate sau șterse, după cum urmează:
ON UPDATE
și ON DELETE
specificați acțiunea care se va executa atunci când un rând în tabelul părinte este actualizat și șterse., Următoarele sunt permise acțiuni : NO ACTION
, CASCADE
, SET NULL
și SET DEFAULT
Ștergere acțiuni de rânduri în tabelul părinte
Dacă ștergeți unul sau mai multe rânduri în tabelul părinte, puteți seta una din următoarele acțiuni:
-
ON DELETE NO ACTION
: SQL Server ridică o eroare și role înapoi acțiunea de ștergere de pe rândul din tabelul părinte. -
ON DELETE CASCADE
: SQL Server șterge rândurile din tabelul copil care corespunde rândului șters din tabelul părinte., -
ON DELETE SET NULL
: SQL Server seturi de rânduri în tabel copil săNULL
dacă rândurile corespunzătoare din tabelul părinte sunt șterse. Pentru a executa această acțiune, coloanele cheie străine trebuie să fie nule. -
ON DELETE SET DEFAULT
SQL Server setează rândurile din tabelul copil la valorile lor implicite dacă rândurile corespunzătoare din tabelul părinte sunt șterse. Pentru a executa această acțiune, coloanele cheie străine trebuie să aibă definiții implicite. Rețineți că o coloană nullable are o valoare implicită deNULL
dacă nici o valoare implicită specificată.,
în mod implicit, SQL Server aplicăON DELETE NO ACTION
dacă nu specificați în mod explicit nicio acțiune.dacă actualizați unul sau mai multe rânduri în tabelul părinte, puteți seta una dintre următoarele acțiuni:
-
ON UPDATE NO ACTION
: SQL Server ridică o eroare și derulează acțiunea de actualizare pe rândul din tabelul părinte. -
ON UPDATE CASCADE
: SQL Server actualizează rândurile corespunzătoare din tabelul copil atunci când rândurile din tabelul părinte sunt actualizate., -
ON UPDATE SET NULL
: SQL Server setează rândurile din tabelul copil laNULL
când rândul corespunzător din tabelul părinte este actualizat. Rețineți că coloanele cheie străine trebuie să fie nullable pentru această acțiune pentru a executa. -
ON UPDATE SET DEFAULT
: SQL Server setează valorile implicite pentru rândurile din tabelul copil care au actualizat rândurile corespunzătoare din tabelul părinte.