Primär nyckel och främmande nyckel in SQLite med exempel

SQLite begränsningar

Kolumnbegränsningar tvingar fram begränsningar och regler för de värden som infogas i en kolumn för att validera infogade data. Kolumnbegränsningar definieras när du skapar en tabell i kolumndefinitionen.

SQLite Primärnyckel

Alla värden i en primärnyckelkolumn ska vara unika och inte null

Primärnyckeln kan appliceras på endast en kolumn eller på en kombination av kolumner, i det senare fallet ska kombinationen av kolumnernas värden vara unik för alla tabellernas rader.

Syntax:

Det finns många olika sätt att definiera en primärnyckel i en tabell som:

  • I själva kolumndefinitionen:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • Som en separat definition:
    PRIMARY KEY(ColumnName);
  • Så här skapar du en kombination av kolumner som en primärnyckel:
    PRIMARY KEY(ColumnName1, ColumnName2);

Inte nollbegränsning

SQLite Inte null-begränsning förhindrar att en kolumn har ett nollvärde:

ColumnName INTEGER  NOT NULL;

STANDARD Begränsning

SQLite Standardbegränsning om du inte infogar något värde i en kolumn, kommer standardvärdet att infogas istället.

Till exempel:

ColumnName INTEGER DEFAULT 0;

Om du skriver en insert-sats och du inte angav något värde för den kolumnen, kommer kolumnen att ha värdet 0.

SQLite Unik begränsning

SQLite Unik begränsning det kommer att förhindra dubbletter av värden bland alla värden i kolumnen.

Till exempel:

EmployeeId INTEGER NOT NULL UNIQUE;

Detta kommer att upprätthålla "Anställnings-ID" värdet för att vara unikt, inga duplicerade värden tillåts. Observera att detta gäller för värdena i kolumnen "Anställnings-ID" Endast.

SQLite KONTROLLERA begränsning

SQLite check constraint a condition för att kontrollera ett infogat värde, om värdet inte matchar villkoret kommer det inte att infogas.

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

Du kan inte infoga ett värde mindre än 10 i "Kvantitet" kolonn.

SQLite Främmande nyckel

Smakämnen SQLite främmande nyckel är en begränsning som verifierar förekomsten av värde i en tabell till en annan tabell som har en relation med den första tabellen där den främmande nyckeln är definierad.

När du arbetar med flera tabeller, när det finns två tabeller som relaterar till varandra med en kolumn gemensam. Och om du vill försäkra dig om att värdet som infogas i en av dem måste finnas i den andra tabellens kolumn, bör du använda en "Foreign key Constraint" på kolumnen gemensamt.

I det här fallet, när du försöker infoga ett värde i den kolumnen, kommer den främmande nyckeln att säkerställa att det infogade värdet finns i tabellens kolumn.

Observera att begränsningar för främmande nycklar inte är aktiverade som standard i SQLite, måste du aktivera dem först genom att köra följande kommando:

PRAGMA foreign_keys = ON;

Utländska nyckelbegränsningar infördes i SQLite från och med version 3.6.19.

Exempel på SQLite Främmande nyckel

Antag om vi har två tabeller; Studenter och institutioner.

Tabellen Studenter har en lista över studenter och avdelningstabellen har en lista över institutionerna. Varje student tillhör en institution; dvs varje student har en avdelnings-ID-kolumn.

Nu ska vi se hur den främmande nyckelbegränsningen kan vara till hjälp för att säkerställa att värdet på avdelnings-id:t i elevtabellen måste finnas i avdelningstabellen.

SQLite Främmande nyckel

Så, om vi skapade en främmande nyckel-begränsning på DepartmentId i tabellen Studenter, måste varje infogat departmentId presenteras i Departments-tabellen.

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

För att kontrollera hur främmande nyckelbegränsningar kan förhindra att odefinierat element eller värde infogas i en tabell som har en relation till en annan tabell, kommer vi att titta på följande exempel.

I det här exemplet har tabellen Institutioner en utländsk nyckel-begränsning till tabellen Studenter, så alla departmentId-värden som infogas i studenttabellen måste finnas i institutionstabellen. Om du försöker infoga ett departmentId-värde som inte finns i avdelningstabellen, skulle den främmande nyckeln hindra dig från att göra det.

Låt oss infoga två avdelningar "DEN" och "Konst" i avdelningstabellen enligt följande:

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

De två satserna ska infoga två avdelningar i avdelningstabellen, du kan säkerställa att de två värdena infogades genom att köra frågan "VÄLJ * FRÅN avdelningar" efter det:

SQLite Främmande nyckel

Försök sedan att infoga en ny student med ett avdelnings-ID som inte finns i avdelningarnas tabell:

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

Raden kommer inte att infogas och du får ett felmeddelande som säger att: FOREIGN KEY-begränsningen misslyckades.