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.
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:
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.