Primarni ključ i vanjski ključ SQLite s Primjerima

SQLite ograničenja

Ograničenja stupaca provode ograničenja i pravila za vrijednosti umetnute u stupac kako bi se potvrdili umetnuti podaci. Ograničenja stupaca definiraju se prilikom izrade tablice, u definiciji stupca.

SQLite Glavni ključ

Sve vrijednosti u stupcu primarnog ključa trebaju biti jedinstvene, a ne null

Primarni ključ može se primijeniti na samo jedan stupac ili na kombinaciju stupaca, u potonjem slučaju kombinacija vrijednosti stupaca treba biti jedinstvena za sve retke tablice.

Sintaksa:

Postoji mnogo različitih načina za definiranje primarnog ključa u tablici kao što su:

  • U samoj definiciji stupca:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • Kao zasebna definicija:
    PRIMARY KEY(ColumnName);
  • Da biste stvorili kombinaciju stupaca kao primarnog ključa:
    PRIMARY KEY(ColumnName1, ColumnName2);

Nije nulto ograničenje

SQLite Ograničenje Not null sprječava stupac da ima null vrijednost:

ColumnName INTEGER  NOT NULL;

DEFAULT ograničenje

SQLite Zadano ograničenje ako ne umetnete nijednu vrijednost u stupac, umjesto toga bit će umetnuta zadana vrijednost.

Na primjer:

ColumnName INTEGER DEFAULT 0;

Ako napišete naredbu za umetanje, a niste naveli nikakvu vrijednost za taj stupac, stupac će imati vrijednost 0.

SQLite JEDINSTVENO ograničenje

SQLite Jedinstveno ograničenje ono će spriječiti duple vrijednosti među svim vrijednostima stupca.

Na primjer:

EmployeeId INTEGER NOT NULL UNIQUE;

Ovo će nametnuti “Id zaposlenika” ako vrijednost bude jedinstvena, neće biti dopuštene duplicirane vrijednosti. Imajte na umu da se ovo odnosi na vrijednosti stupca “Id zaposlenika” samo.

SQLite PROVJERITE ograničenje

SQLite check constraint uvjet za provjeru umetnute vrijednosti, ako vrijednost ne odgovara uvjetu, neće biti umetnuta.

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

Ne možete umetnuti vrijednost manju od 10 u "Količina" stupac.

SQLite Strani kljuc

Korištenje električnih romobila ističe SQLite strani ključ je ograničenje koje provjerava postojanje vrijednosti prisutne u jednoj tablici u drugoj tablici koja ima relaciju s prvom tablicom u kojoj je definiran strani ključ.

Tijekom rada s više tablica, kada postoje dvije tablice koje se odnose jedna na drugu s jednim zajedničkim stupcem. A ako želite osigurati da vrijednost umetnuta u jednu od njih mora postojati u stupcu druge tablice, tada biste trebali koristiti “Ograničenje stranog ključa” na zajedničkom stupcu.

U ovom slučaju, kada pokušate umetnuti vrijednost u taj stupac, tada će strani ključ osigurati da umetnuta vrijednost postoji u stupcu tablice.

Imajte na umu da ograničenja stranih ključeva nisu omogućena prema zadanim postavkama u SQLite, prvo ih morate omogućiti pokretanjem sljedeće naredbe:

PRAGMA foreign_keys = ON;

Ograničenja stranog ključa uvedena su u SQLite počevši od verzije 3.6.19.

Primjer SQLite Strani kljuc

Pretpostavimo da imamo dvije tablice; Studenti i odjeli.

Tablica Studenti ima popis studenata, a tablica odjela ima popis odjela. Svaki učenik pripada odjelu; tj. svaki student ima stupac DepartmentId.

Sada ćemo vidjeti kako ograničenje stranog ključa može biti od pomoći da se osigura da vrijednost ID-a odjela u tablici studenata mora postojati u tablici odjela.

SQLite Strani kljuc

Dakle, ako smo stvorili ograničenje stranog ključa za DepartmentId u tablici Studenti, svaki umetnuti DepartmentId mora biti prisutan u tablici 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)
);

Da bismo provjerili kako ograničenja stranog ključa mogu spriječiti umetanje nedefiniranog elementa ili vrijednosti u tablicu koja ima odnos s drugom tablicom, pogledat ćemo sljedeći primjer.

U ovom primjeru tablica Departments ima ograničenje stranog ključa za tablicu Students, tako da svaka vrijednost DepartmentId umetnuta u tablicu students mora postojati u tablici Departments. Ako pokušate umetnuti vrijednost DepartmentId koja ne postoji u tablici odjela, ograničenje stranog ključa spriječilo bi vas da to učinite.

Umetnimo dva odjela "TO" i “Umjetnost” u tablicu odjela kako slijedi:

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

Dvije izjave trebaju umetnuti dva odjela u tablicu odjela, možete osigurati da su dvije vrijednosti umetnute pokretanjem upita “SELECT * FROM Departments” nakon toga:

SQLite Strani kljuc

Zatim pokušajte umetnuti novog učenika s ID-om odjela koji ne postoji u tablici odjela:

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

Redak neće biti umetnut i dobit ćete pogrešku koja glasi: Ograničenje FOREIGN KEY nije uspjelo.