Articles

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ă de NULL 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.