Primær nøgle og fremmed nøgle ind SQLite med eksempler

SQLite Begrænsninger

Kolonnebegrænsninger håndhæver begrænsninger og regler for de værdier, der er indsat i en kolonne, for at validere de indsatte data. Kolonnebegrænsninger defineres, når du opretter en tabel, i kolonnedefinitionen.

SQLite Primærnøgle

Alle værdierne i en primær nøglekolonne skal være unikke og ikke null

Den primære nøgle kan kun anvendes på én kolonne eller på en kombination af kolonner, i sidstnævnte tilfælde skal kombinationen af ​​kolonnernes værdier være unik for alle tabellernes rækker.

Syntaks:

Der er mange forskellige måder at definere en primær nøgle på en tabel som:

  • I selve kolonnedefinitionen:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • Som en separat definition:
    PRIMARY KEY(ColumnName);
  • Sådan opretter du en kombination af kolonner som en primær nøgle:
    PRIMARY KEY(ColumnName1, ColumnName2);

Ikke nul begrænsning

SQLite Ikke null-begrænsning forhindrer en kolonne i at have en null-værdi:

ColumnName INTEGER  NOT NULL;

STANDARD Begrænsning

SQLite Standardbegrænsning, hvis du ikke indsætter nogen værdi i en kolonne, indsættes standardværdien i stedet for.

For eksempel:

ColumnName INTEGER DEFAULT 0;

Hvis du skriver en insert-sætning, og du ikke har angivet nogen værdi for den kolonne, vil kolonnen have værdien 0.

SQLite UNIK begrænsning

SQLite Unik begrænsning det vil forhindre duplikerede værdier blandt alle værdierne i kolonnen.

For eksempel:

EmployeeId INTEGER NOT NULL UNIQUE;

Dette vil håndhæve "Medarbejder-ID" værdi for at være unik, vil ingen duplikerede værdier være tilladt. Bemærk, at dette gælder for værdierne i kolonnen "Medarbejder-ID" alene.

SQLite CHECK begrænsning

SQLite check constraint en betingelse for at kontrollere en indsat værdi, hvis værdien ikke matcher betingelsen, vil den ikke blive indsat.

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

Du kan ikke indsætte en værdi mindre end 10 i "Antal" kolonne.

SQLite Fremmed nøgle

SQLite fremmednøgle er en begrænsning, der verificerer eksistensen af ​​værdi til stede i en tabel til en anden tabel, der har en relation til den første tabel, hvor fremmednøglen er defineret.

Mens du arbejder med flere tabeller, når der er to tabeller, der relaterer til hinanden med én kolonne til fælles. Og hvis du vil sikre dig, at værdien indsat i en af ​​dem skal eksistere i den anden tabels kolonne, så skal du bruge en "Foreign key Constraint" på kolonnen til fælles.

I dette tilfælde, når du forsøger at indsætte en værdi i den kolonne, vil den fremmede nøgle sikre, at den indsatte værdi findes i tabellens kolonne.

Bemærk, at begrænsninger for fremmednøgler ikke er aktiveret som standard i SQLite, skal du først aktivere dem ved at køre følgende kommando:

PRAGMA foreign_keys = ON;

Udenlandske nøglebegrænsninger blev indført i SQLite fra version 3.6.19.

Eksempel SQLite Fremmed nøgle

Antag, hvis vi har to tabeller; Studerende og afdelinger.

Tabellen Elever har en liste over studerende, og afdelingstabellen har en liste over afdelingerne. Hver elev tilhører en afdeling; dvs. hver elev har en afdelings-id-kolonne.

Nu vil vi se, hvordan den fremmede nøgle-begrænsning kan være nyttig for at sikre, at værdien af ​​afdelings-id'et i elevtabellen skal eksistere i afdelingstabellen.

SQLite Fremmed nøgle

Så hvis vi oprettede en fremmednøgle-begrænsning på afdelings-id'et på tabellen Studenter, skal hvert indsat afdeling-id præsenteres i tabellen afdelinger.

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)
);

For at kontrollere, hvordan fremmednøglebegrænsninger kan forhindre udefineret element eller værdi i at blive indsat i en tabel, der har en relation til en anden tabel, vil vi se på følgende eksempel.

I dette eksempel har tabellen Afdelinger en fremmednøglebegrænsning til tabellen Studenter, så enhver afdelings-Id-værdi, der er indsat i tabellen studerende, skal eksistere i tabellen Afdelinger. Hvis du bliver forsøgt at indsætte en afdelings-id-værdi, der ikke findes i afdelingstabellen, vil den fremmede nøgle-begrænsning forhindre dig i at gøre det.

Lad os indsætte to afdelinger "DET" og "Kunst" i afdelingstabellen som følger:

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

De to sætninger skal indsætte to afdelinger i afdelingstabellen, du kan sikre dig, at de to værdier blev indsat ved at køre forespørgslen "VÆLG * FRA afdelinger" efter det:

SQLite Fremmed nøgle

Prøv derefter at indsætte en ny elev med et afdelings-id, der ikke findes i afdelingernes tabel:

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

Rækken vil ikke blive indsat, og du vil få en fejl, der siger, at: FOREIGN KEY-begrænsning mislykkedes.