Clauza CONSTRAINT

O restricție este similară cu un index, deși se poate utiliza și pentru a stabili o relație cu un alt tabel.

Utilizați clauza CONSTRAINT în instrucțiuni ALTER TABLE și CREATE TABLE pentru a crea sau a șterge restricții. Există două tipuri de clauze CONSTRAINT: una pentru a crea o restricție pentru un singur câmp și alta pentru a crea o restricție pentru mai multe câmpuri.

Notă : Motorul de baze de date Microsoft Access nu acceptă utilizarea CONSTRAINT sau a altei instrucțiuni în limbajul de definiție a datelor cu baze de date care nu aparțin de Microsoft Access. Utilizați metodele de creare DAO în schimb.

Sintaxă

Restricție pentru un singur câmp:

CONSTRAINT nume {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES tabelextern [(câmpextern1, câmpextern2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Restricție pentru mai multe câmpuri:

CONSTRAINT nume
{PRIMARY KEY (primar1[, primar2 [, ...]]) |
UNIQUE (unic1[, unic2 [, ...]]) |
NOT NULL (nenul1[, nenul2 [, ...]]) |
FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES tabelextern [(câmpextern1 [, câmpextern2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Clauza CONSTRAINT are următoarele componente:

Parte

Descriere

nume

Numele restricției care va fi creată.

primară1, primară2

Numele câmpului sau câmpurilor care vor fi desemnate cheie primară.

unic1, unic2

Numele câmpului sau câmpurilor care vor fi desemnate drept cheie unică.

nenul1, nenul2

Numele câmpului sau câmpurilor care sunt restricționate la valori nenule.

ref1, ref2

Numele unui câmp sau ale unor câmpuri cheie străină care fac referire la câmpuri din alt tabel.

tabelextern

Numele unui tabel cu cheie străină care conține câmpul sau câmpurile specificate de câmpextern.

câmpextern1, câmpextern2

Numele câmpului sau ale câmpurilor dintr-un tabelextern specificat de ref1, ref2. Puteți omite această clauză dacă acest câmp la care faceți referire este cheia primară pentru tabelextern.


Observații

Utilizați sintaxa pentru o restricție pentru un singur câmp în clauza de definire a câmpului unei instrucțiuni ALTER TABLE sau CREATE TABLE, imediat după specificația tipului de date al câmpului.

Utilizați sintaxa pentru o restricție pentru mai multe câmpuri, ori de câte ori utilizați cuvântul rezervat CONSTRAINT în afara unei clauze de definiție de câmp într-o instrucțiune ALTER TABLE sau CREATE TABLE.

Utilizând CONSTRAINT puteți desemna un câmp ca având unul dintre următoarele tipuri de restricții:

  • Puteți utiliza cuvântul rezervat UNIQUE pentru a desemna un câmp drept cheie unică. Acest lucru înseamnă că două înregistrări din tabel nu pot avea aceeași valoare în acest câmp. Puteți restricționa orice câmp sau listă de câmpuri ca unice. Dacă o restricție pentru mai multe câmpuri este desemnată drept cheie unică, valorile combinate ale tuturor câmpurilor din index trebuie să fie unice, chiar dacă două sau mai multe înregistrări au aceeași valoare în doar unul dintre câmpuri.

  • Puteți utiliza cuvintele rezervate PRIMARY KEY pentru a desemna un câmp sau un set de câmpuri dintr-un tabel drept cheie primară. Toate valorile din cheia primară trebuie să fie unice și nenule, și poate exista o singură cheie primară pentru un tabel.

    Notă : Nu setați o restricție PRIMARY KEY pentru un tabel care are deja o cheie primară; dacă faceți acest lucru, se produce o eroare.

  • Puteți utiliza cuvintele rezervate FOREIGN KEY pentru a desemna un câmp drept cheie străină. Dacă cheia primară a tabelului extern constă din mai multe câmpuri, trebuie să utilizați o definiție de restricție pentru mai multe câmpuri, listând toate câmpurile de referință, numele tabelului extern și numele câmpurilor la care se face referire în tabelul extern în aceeași ordine în care sunt listate câmpurile de referință. În cazul în care câmpul sau câmpurile la care se face referire sunt cheia primară a tabelului extern, nu trebuie să specificați câmpurile de referire. În mod implicit, motorul de baze de date se comportă ca și cum cheia primară a tabelului extern ar fi câmpurile la care se face referire.

    Restricțiile pentru cheia străină definesc acțiunile specifice care trebuie să fie efectuate atunci când se modifică o valoare de cheie primară corespunzătoare:

  • Puteți specifica acțiunile care trebuie să fie efectuate pentru tabelul extern pe baza unei acțiuni corespunzătoare efectuate pentru o cheie primară din tabelul pe care s-a definit CONSTRAINT. De exemplu, luați în considerare următoarea definiție pentru tabelul Customers (Clienți):

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Luați în considerare următoarea definiție a tabelului Orders (Comenzi), care definește o relație de cheie străină ce face referire la cheia primară a tabelului Customers (Clienți):

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

Pentru cheia străină s-a definit atât o clauză ON UPDATE CASCADE, cât și o clauză ON DELETE CASCADE. Clauza ON UPDATE CASCADE înseamnă că, dacă identificatorul unui client (CustId) se actualizează în tabelul Customers (Clienți), actualizarea va fi în cascadă în tabelul Orders (Comenzi). Fiecare comandă care conține o valoare de identificator de client corespondentă va fi actualizată automat cu noua valoare. Clauza ON DELETE CASCADE înseamnă că, dacă un client este șters din tabelul Customers (Clienți), toate rândurile din tabelul Orders(Comenzi) care conțin aceeași valoare de identificator de client vor fi șterse de asemenea.

Luați în considerare următoarea definiție diferită a tabelului Orders (Comenzi) utilizând acțiunea SET NULL în locul acțiunii CASCADE:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

Clauza ON UPDATE SET NULL înseamnă că, dacă identificatorul unui client (CustId) se actualizează în tabelul Customers (Clienți), valorile cheii străine corespondente din tabelul Orders (Comenzi) vor fi setate automat la NULL. În mod similar, clauza ON DELETE SET NULL înseamnă că, dacă un este șters din tabelul Customers (Clienți), toate cheile străine corespondente din tabelul Orders (Comenzi) vor fi setate automat la NULL.

Pentru a preveni crearea automată de indexuri pentru cheile străine, se poate utiliza modificatorul NO INDEX. Această formă de definiție de cheie străină trebuie utilizată numai în cazurile unde valorile de index rezultate ar fi dublate frecvent. Acolo unde valorile dintr-un index de cheie străină sunt dublate frecvent, utilizarea unui index poate fi mai puțin eficientă decât simpla efectuare a unei scanări de tabel. Păstrarea acestui tip de index cu rânduri inserate și șterse din tabel degradează performanța și nu furnizează niciun beneficiu.



Extindeți-vă competențele
Explorați instruirea
Fiți primul care obține noile caracteristici
Alăturați-vă utilizatorilor Office Insider

Au fost utile aceste informații?

Vă mulțumim pentru feedback!

Vă mulțumim pentru feedback! Se pare că ar fi util să luați legătura cu unul dintre agenții noștri de asistență Office.

×