Cheia primară și cheia străină SQLite cu Exemple

SQLite Constrângerile

Constrângerile de coloană impun constrângeri și reguli la valorile inserate pe o coloană pentru a valida datele inserate. Constrângerile coloanelor sunt definite la crearea unui tabel, în definiția coloanei.

SQLite Cheia principala

Toate valorile dintr-o coloană a cheii primare ar trebui să fie unice și nu nule

Cheia primară poate fi aplicată doar unei singure coloane sau pe o combinație de coloane, în ultimul caz, combinația valorilor coloanelor ar trebui să fie unică pentru toate rândurile tabelelor.

Sintaxă:

Există o mulțime de moduri diferite de a defini o cheie primară pe un tabel, cum ar fi:

  • În definiția coloanei în sine:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • Ca o definiție separată:
    PRIMARY KEY(ColumnName);
  • Pentru a crea o combinație de coloane ca cheie primară:
    PRIMARY KEY(ColumnName1, ColumnName2);

Constrângere nu nulă

SQLite Constrângerea nenulă împiedică o coloană să aibă o valoare nulă:

ColumnName INTEGER  NOT NULL;

Constrângere DEFAULT

SQLite Constrângere implicită dacă nu inserați nicio valoare într-o coloană, valoarea implicită va fi inserată.

De exemplu:

ColumnName INTEGER DEFAULT 0;

Dacă scrieți o instrucțiune de inserare și nu ați specificat nicio valoare pentru acea coloană, coloana va avea valoarea 0.

SQLite Constrângere unică

SQLite Constrângere unică va preveni duplicarea valorilor între toate valorile coloanei.

De exemplu:

EmployeeId INTEGER NOT NULL UNIQUE;

Acest lucru va pune în aplicare "Card de identitate al angajatului" valoarea să fie unică, nu vor fi permise valori duplicate. Rețineți că, acest lucru se aplică valorilor coloanei "Card de identitate al angajatului" numai.

SQLite VERIFICARE constrângere

SQLite verificați constrângerea unei condiții pentru a verifica o valoare inserată, dacă valoarea nu se potrivește cu condiția, nu va fi inserată.

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

Nu puteți introduce o valoare mai mică de 10 în "Cantitate" coloana.

SQLite Cheie externă

SQLite cheia externă este o constrângere care verifică existența unei valori prezente într-un tabel față de un alt tabel care are o relație cu primul tabel în care este definită cheia externă.

În timp ce lucrați cu mai multe tabele, când există două tabele care se raportează unul la celălalt cu o coloană în comun. Și dacă doriți să vă asigurați că valoarea inserată într-una dintre ele trebuie să existe în coloana celuilalt tabel, atunci ar trebui să utilizați o „Constrângere cheie străină” pe coloana în comun.

În acest caz, când încercați să inserați o valoare în acea coloană, atunci cheia străină se va asigura că valoarea inserată există în coloana tabelului.

Rețineți că constrângerile cheilor externe nu sunt activate implicit în SQLite, trebuie să le activați mai întâi rulând următoarea comandă:

PRAGMA foreign_keys = ON;

Au fost introduse constrângeri cheie străine în SQLite începând cu versiunea 3.6.19.

Exemplu de SQLite Cheie externă

Să presupunem că dacă avem două tabele; Studenți și Departamente.

Tabelul Studenți are o listă de studenți, iar tabelul de departamente are o listă a departamentelor. Fiecare student aparține unui departament; adică, fiecare student are o coloană DepartmentId.

Acum, vom vedea cum poate fi utilă constrângerea cheii externe pentru a ne asigura că valoarea id-ului departamentului din tabelul studenților trebuie să existe în tabelul departamentelor.

SQLite Cheie externă

Deci, dacă am creat o constrângere de cheie străină pe DepartmentId din tabelul Studenți, fiecare departmentId inserat trebuie să se prezinte în tabelul Departments.

CREATE TABLE [Departments] (
	[DepartmentId] INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT,
	[DepartmentName] NVARCHAR(50)  NULL
);
CREATE TABLE [Students] (
	[StudentId] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
	[StudentName] NVARCHAR(50)  NULL,
	[DepartmentId] INTEGER  NOT NULL,
	[DateOfBirth] DATE  NULL,
	FOREIGN KEY(DepartmentId) REFERENCES Departments(DepartmentId)
);

Pentru a verifica modul în care constrângerile cheii străine pot împiedica inserarea unui element sau o valoare nedefinită într-un tabel care are o relație cu un alt tabel, vom analiza următorul exemplu.

În acest exemplu, tabelul Departments are o constrângere de cheie străină pentru tabelul Students, astfel încât orice valoare DepartmentId inserată în tabelul Students trebuie să existe în tabelul departamente. Dacă încercați să inserați o valoare DepartmentId care nu există în tabelul departamente, constrângerea cheii externe v-ar împiedica să faceți acest lucru.

Să introducem două departamente "ACEASTA" si „Arte” în tabelul departamentelor după cum urmează:

INSERT INTO Departments VALUES(1, 'IT');
INSERT INTO Departments VALUES(2, 'Arts');

Cele două instrucțiuni ar trebui să insereze două departamente în tabelul de departamente, vă puteți asigura că cele două valori au fost inserate prin rularea interogării „SELECTARE * DIN Departamente” după care:

SQLite Cheie externă

Apoi încercați să inserați un nou student cu un DepartmentId care nu există în tabelul departamentelor:

INSERT INTO Students(StudentName,DepartmentId) VALUES('John', 5);

Rândul nu va fi inserat și veți primi o eroare care spune că: Constrângerea FOREIGN KEY a eșuat.