SQLShack (Română)

0 Comments

În articolul precedent Frecvent utilizate SQL Server Constrângeri: not NULL, UNIQUE și CHEIE PRIMARĂ, am descris, în detaliu, primele trei tipuri de SQL Server constrângeri; not NULL, UNIQUE și CHEIE PRIMARĂ. În acest articol, vom discuta celelalte trei constrângeri; cheie străină, verificați și implicit descriind fiecare pe scurt și oferind exemple practice.,

constrângere cheie străină

o cheie străină este o cheie de bază de date care este utilizată pentru a lega două tabele împreună. Constrângerea cheii străine identifică relațiile dintre tabelele bazei de date prin referirea unei coloane sau a unui set de coloane din tabelul copil care conține cheia străină la coloana cheie primară sau la setul de coloane din tabelul părinte.

relația dintre copil și tabelele părinte este menținută prin verificarea existenței valorilor cheie străine din tabelul copil în cheia principală a tabelului părinte de referință înainte de a introduce aceste valori în tabelul copil., În acest fel, constrângerea cheii străine, în tabelul copil care face referire la cheia primară din tabelul părinte, va impune integritatea referențială a bazei de date. Integritatea referențială asigură că relația dintre tabelele bazei de date este păstrată în timpul procesului de inserare a datelor. Reamintim că constrângerea cheie primară garantează că nu vor fi inserate valori nule sau duplicate pentru coloana sau coloanele selectate în tabelul respectiv, impunând integritatea entității pentru tabelul respectiv., Integritatea entității impusă de cheia primară și integritatea referențială impusă de cheia străină formează împreună integritatea cheie.

restricție De CHEIE EXTERNĂ diferă de constrângere CHEIE PRIMARĂ în care, puteți crea o singură CHEIE PRIMARĂ pe fiecare masă, cu abilitatea de a crea mai multe constrângeri CHEIE STRĂINĂ în fiecare tabel de corelare mai multe tabela părinte. O altă diferență este că cheia străină permite introducerea valorilor nule dacă nu există o constrângere nulă definită pe această cheie, dar cheia primară nu acceptă nuluri.,

constrângerea cheii externe vă oferă, de asemenea, posibilitatea de a controla ce măsuri vor fi luate atunci când valoarea de referință din tabelul părinte este actualizată sau ștearsă, utilizând clauzele ON UPDATE și on DELETE. Acțiunile acceptate care pot fi întreprinse la ștergerea sau actualizarea valorilor tabelului părinte includ:

  • nicio acțiune: când clauzele ON UPDATE sau on DELETE sunt setate la NO ACTION, operația de actualizare sau ștergere efectuată în tabelul părinte va eșua cu o eroare.,
  • CASCADE: setarea clauzelor ON UPDATE sau on DELETE la CASCADE, aceeași acțiune efectuată pe valorile de referință din tabelul părinte va fi reflectată la valorile aferente din tabelul copil. De exemplu, dacă valoarea de referință este ștearsă în tabelul părinte, toate rândurile aferente din tabelul copil sunt, de asemenea, șterse.
  • SET NULL: cu această opțiune actualizare și ștergere clauze, dacă valorile de referință din tabelul părinte sunt șterse sau modificate, toate valorile conexe din tabelul copil sunt setate la valoarea nulă.,
  • setare implicită: folosind opțiunea Setare implicită a clauzelor ON UPDATE și on DELETE se specifică faptul că, dacă valorile de referință din tabelul părinte sunt actualizate sau șterse, valorile aferente din tabelul copil cu coloane cheie străine vor fi setate la valoarea implicită.

puteți adăuga constrângerea cheii străine în timp ce definiți coloana folosind instrucțiunea Creare tabel T-SQL sau adăugați-o după crearea tabelului folosind instrucțiunea ALTER TABLE T-SQL. Vom crea două tabele noi pentru a înțelege funcționalitatea constrângerii cheilor străine., Primul tabel va acționa ca tabel părinte cu coloana ID definită ca o coloană cheie primară. Al doilea tabel va acționa ca tabel copil, cu coloana ID definită ca coloana cheie străină care face referire la coloana ID din tabelul părinte.,> ID INT CHEIE PRIMARĂ,

Nume VARCHAR(50) NUL
)
GO
create TABLE ConstraintDemoChild
(
CID INT CHEIE PRIMARĂ,
ID INT CHEIE EXTERNĂ REFERINȚE ConstraintDemoParent(ID)
)

După crearea celor două tabele, vom introduce trei înregistrări în tabela părinte, și două înregistrări în tabelul de copil, folosind următoarele INTRODUCE declarații:

rezultatul va arăta că cele trei înregistrări cu succes sunt inserate în tabelul părinte., Prima înregistrare pe care am încercat să o introducem în tabelul copil este introdusă fără nicio eroare, deoarece valoarea ID a 1 există deja în tabelul părinte.,deoarece ID-ul valoare de 4 nu există în tabelul părinte, și din cauza restricție de CHEIE EXTERNĂ, nu va fi capabil de a introduce un ID de valoare pentru masa copilului care nu există în tabela părinte:

Verificarea părinte și copil tabele de conținut, veți vedea că numai o singură înregistrare este introdus în tabelul de copil, după cum puteți vedea mai jos:

Cum am făcut-o nu mai vorbim de CHEIE EXTERNĂ nume de constrângere în timp ce crearea de masă pentru copii, SQL Server va atribui un nume unic care putem prelua din INFORMATION_SCHEMA.,TABLE_CONSTRAINTS system view using the following query:

1
2
3
4
5
6
7
8

SELECT CONSTRAINT_NAME,
TABLE_SCHEMA ,
TABLE_NAME,
CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.,onstraintDemoChild
ADD CONSTRAINT FK__ConstraintDe__ID
foreign KEY (ID) REFERINȚE ConstraintDemoParent(ID);

operațiunea va eșua, ca ID-ul valoare de 4 nu există în tabelul părinte și încalcă integritatea referențială între copil și părinte tabele, așa cum se vede în următorul mesaj de eroare:

Pentru a fi capabil de a crea restricție de CHEIE EXTERNĂ în tabelul de copil, ar trebui să elimina acest conflict în primul rând prin ștergerea sau actualizarea acest record., Here we will try to modify the ID value with the following UPDATE command:

1
2
3

UPDATE ., SETAȚI ID =2 UNDE ID = 4

Acum restricție de CHEIE EXTERNĂ va fi creat cu succes, fara nici o eroare așa cum se arată mai jos:

O restricție de CHEIE EXTERNĂ poate fi definit cu ajutorul SQL Server Management Studio instrument. Faceți clic dreapta pe tabelul dorit și selectați opțiunea de proiectare.,> Din fereastra afișată, puteți să specificați cu ușurință numele de restricție de CHEIE EXTERNĂ, tabelele și coloanele care vor participa în această relație, făcând clic pe Tabele Și Coloane caietul de sarcini, dacă verificarea datelor existente este necesar, și în cele din urmă acțiunii efectuate când dosarul respectiv este șters sau modificat în tabelul părinte, așa cum se arată mai jos:

CHECK Constraint

UN CEC constrângere este definită pe o coloană sau un set de coloane pentru a limita gama de valori care pot fi introduse în aceste coloane, folosind o condiție predefinite., Constrângerea de verificare intră în acțiune pentru a evalua valorile inserate sau modificate, unde valoarea care satisface condiția va fi introdusă în tabel, în caz contrar, operația de inserare va fi eliminată. Este permisă specificarea mai multor constrângeri de verificare pentru aceeași coloană.

definirea condiției de verificare a constrângerii este oarecum similară cu scrierea clauzei WHERE a unei interogări, folosind diferiți operatori de comparație, cum ar fi și, sau, între, în, LIKE și IS NULL pentru a scrie expresia booleană care va returna TRUE, FALSE sau UNKNOWN., Constrângerea de verificare va returna o valoare necunoscută atunci când o valoare nulă este prezentă în condiție. Constrângerea de verificare este utilizată în principal pentru a impune integritatea domeniului prin limitarea valorilor inserate la cele care respectă valorile definite, regulile de interval sau format.

să creăm un nou tabel simplu care are trei coloane; coloana ID care este considerată cheia principală a acelui tabel, nume și salariu. O constrângere de verificare este definită în coloana salarială pentru a vă asigura că nu se introduc valori zero sau negative în acea coloană.,v>6

7
8
9
create TABLE ConstraintDemo4
(
ID INT CHEIE PRIMARĂ,
Nume VARCHAR(50) NULL,
Salariu INT CHECK (Salariu>0)
)
GO

Dacă executați mai jos trei INTRODUCE declarații:

este clar din cele generate rezultat că prima înregistrare este introdus cu nici o eroare cu condiția ca Salariul valoare îndeplinește verificare stare.,rovided Salariu valorile nu respectă constrângerea de VERIFICARE condiție datorită introducerea zero și negativă Salariu de valori, după cum puteți vedea în următorul mesaj de eroare:

Verificarea tabelul de date arată că numai primul rând că a trecut constrângerea de VERIFICARE condiție va fi introdus în tabelul de mai jos:

Am menționat mai devreme în acest articol CHECK constraint permite inserarea unor valori NULL dacă a participat coloane permite NULL, iar valoarea NULL va fi evaluată ca NECUNOSCUTĂ, fără a arunca nici o eroare., Acest lucru este clar din înregistrarea de mai jos care este inserată cu succes, deși valoarea furnizată a coloanei salariale este nulă:

Dacă examinați definiția constrângerii de verificare din declarația anterioară Creare tabel, veți vedea că nu am menționat numele constrângerii definite. În acest caz, SQL Server va atribui un nume unic pentru acea constrângere care poate fi arătată prin interogarea INFORMATION_SCHEMA.TABLE_CONSTRAINTS vizualizare sistem pentru tabelul Constrângeredemo4., Rezultatul va fi așa cum se arată mai jos:

constrângerea de verificare poate fi abandonată folosind instrucțiunea ALTER TABLE T-SQL.,onstraint now, with the following ALTER DATABASE … ADD CONSTRAINT T-SQL statement:

1
2
3
4
5

ALTER TABLE ConstraintDemo4
ADD CONSTRAINT CK__Constrain__Salar
CHECK (Salary>0);

Adding the CHECK constraint will fail., Acest lucru se datorează faptului că, în timp ce SQL Server este verificarea de date deja existente pentru constrângerea de VERIFICARE condiție, una sau mai multe valori care nu respectă constrângerea stare sunt găsite, după cum puteți vedea în următorul mesaj de eroare:

Pentru a fi în măsură să definească constrângerea de VERIFICARE din nou, ar trebui să modificați sau să ștergeți datele care previne constrângere de a fi creat.,de484761″>

1
2
3
ACTUALIZARE ConstraintDemo4 SET Salariu =300 în cazul în CARE ID-ul IN (2,3)

Acum, constrângerea de VERIFICARE pot fi definite cu nici o problemă cum este arătat mai jos:

SQL Server vă permite să dezactivați constrângerea de VERIFICARE pentru cazuri speciale, cum ar fi introducerea cantitate mare de date fără să le pese de întâlnire constrângerea condiție pentru scopuri de testare, sau datorită schimbării în logica de afaceri., Acest caz este valabil numai pentru constrângerile de verificare și cheie străină pe care le puteți dezactiva temporar.,riting constrângerea numele, ca în T-SQL comanda de mai jos:

1
2
3

ALTER TABLE ConstraintDemo4 NOCHECK CONSTRÂNGERE TOATE

De la definiția constrângerii de VERIFICARE, puteți specifica faptul că restricția va fi creat fără a verifica existente rânduri, dar constrângere vor fi marcate ca fiind de încredere., puteți activa toate constrângeri de VERIFICARE, toate dintr-o dată,folosind T-SQL comanda de mai jos:

1
2
3

ALTER TABLE ConstraintDemo4 VERIFICA CONSTRÂNGERE TOATE

în Timp ce activarea anterioară a VERIFICA constrângere, veți vedea că SQL Server nu se va plânge de necontrolat de date care rupe constrângere condiție., În acest caz, integritatea domeniului datelor nu este menținută.

Pentru a rezolva această problemă, DBCC CHECKCONSTRAINTS comanda poate fi ușor de utilizat pentru a identifica date care încalcă restricția de condiție într-o anumită masă sau constrângere, luând în considerare nu pentru a rula comanda în orele de vârf, deoarece aceasta va afecta de performanță SQL Server din cauza nu utilizează o bază de date instantaneu.,v id=”ff419aa09d”>

1
2
3

DBCC CHECKCONSTRAINTS(ConstraintDemo4)

rezultatul va arăta cele două Salariul valori care rupe constrângerea de VERIFICARE condiție, așa cum se arată mai jos:

UN CEC de constrângere poate fi, de asemenea, creat cu ajutorul SQL Server Management Studio instrument, prin click-dreapta pe tabelul necesare și selectarea de opțiuni de Design., Din afișată fereastra de Proiectare, faceți clic dreapta și alegeți Constrângeri de Verificare opțiune, după cum urmează:

Din Constrângeri de Verificare fereastră, puteți specifica CHECK constraint nume, expresie și dacă verificarea datelor existente este necesară, așa cum se arată mai jos:

DEFAULT Constrângere

UN DEFAULT constrângere este folosit pentru a oferi o coloană implicit valoare pentru inserează rânduri dacă nu este specificată nicio valoare pentru acea coloana în declarația INSERT., Constrângerea implicită ajută la menținerea integrității domeniului prin furnizarea de valori adecvate pentru coloană, în cazul în care utilizatorul nu oferă o valoare pentru acesta. Valoarea implicită poate fi o valoare constantă, o valoare a funcției de sistem sau NULL.,elow:

1
2
3
4

ALTER TABLE ConstraintDemo5
Add Constraint DF__Constrânge__Emplo DEFAULT (GETDATE()) PENTRU EmployeeDate

de Asemenea, DEFAULT constrângere pot fi definite folosind SQL Server Management Studio, prin click-dreapta pe tabelul necesare și alege opțiunea de Design., Apoi selectați coloana pe care le va atribui o valoare standard de navigare pe Coloana fereastra de Proprietăți după cum se arată mai jos:

am sperat că acest articol, și anterior, au ajutat pentru a explica șase SQL Server tipuri de constrangere. Vă rugăm să nu ezitați să puneți întrebări în comentariile de mai jos.,numai SQL Server Constrângeri: not NULL, UNIC și CHEIE PRIMARĂ

link-uri Utile

  • de a Crea Constrângeri de Verificare
  • Constrângeri
  • valori Implicite
  • Crearea de Externe Relații Cheie
  • Constrângeri de VERIFICARE

  • Autor
  • Mesajele Recente
Ahmad Yaseen este un Microsoft de Date de Mare inginer cu cunoștințe profunde și experiență în SQL BI, SQL Server de baze de Date administrative și Dezvoltarea domeniilor de activitate.,
este expert Microsoft Certified Solution în managementul și analiza datelor, Microsoft Certified Solution Associate în administrarea și dezvoltarea bazelor de date SQL, Azure Developer Associate și Microsoft Certified Trainer.
De asemenea, el contribuie cu sfaturile sale SQL în multe bloguri.,
Vezi toate posturile de Ahmad Yaseen

Ultimele posturi de Ahmad Yaseen (vezi toate)
  • Cum de a monitoriza Azure data Factory – 15 ianuarie 2021
  • Folosind Sursa de Control în Azure data Factory – ianuarie 12, 2021
  • Folosind Template-uri în Azure data Factory – 8 ianuarie 2021


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *