Primærnøkkel og fremmednøkkel inn SQLite med eksempler
SQLite begrensninger
Kolonnebegrensninger håndhever begrensninger og regler for verdiene som er satt inn i en kolonne for å validere de innsatte dataene. Kolonnebegrensninger er definert når du oppretter en tabell, i kolonnedefinisjonen.
SQLite Primærnøkkel
Alle verdiene i en primærnøkkelkolonne skal være unike og ikke null
Primærnøkkelen kan brukes på bare én kolonne eller på en kombinasjon av kolonner, i sistnevnte tilfelle skal kombinasjonen av kolonnenes verdier være unik for alle tabellenes rader.
Syntaks:
Det er mange forskjellige måter å definere en primærnøkkel på en tabell som:
- I selve kolonnedefinisjonen:
ColumnName INTEGER NOT NULL PRIMARY KEY;
- Som en egen definisjon:
PRIMARY KEY(ColumnName);
- Slik oppretter du en kombinasjon av kolonner som en primærnøkkel:
PRIMARY KEY(ColumnName1, ColumnName2);
Ikke nullbegrensning
SQLite Ikke null-begrensning forhindrer at en kolonne har en nullverdi:
ColumnName INTEGER NOT NULL;
STANDARD Begrensning
SQLite Standardbegrensning hvis du ikke setter inn noen verdi i en kolonne, vil standardverdien settes inn i stedet.
For eksempel:
ColumnName INTEGER DEFAULT 0;
Hvis du skriver en insert-setning, og du ikke spesifiserte noen verdi for den kolonnen, vil kolonnen ha verdien 0.
SQLite UNIK begrensning
SQLite Unik begrensning det vil forhindre dupliserte verdier blant alle verdiene i kolonnen.
For eksempel:
EmployeeId INTEGER NOT NULL UNIQUE;
Dette vil håndheve «Ansatt-ID» verdien for å være unik, vil ingen dupliserte verdier tillates. Merk at dette gjelder verdiene i kolonnen «Ansatt-ID» bare.
SQLite SJEKK begrensning
SQLite sjekk begrensning en betingelse for å sjekke en innsatt verdi, hvis verdien ikke samsvarer med betingelsen, vil den ikke bli satt inn.
Quantity INTEGER NOT NULL CHECK(Quantity > 10);
Du kan ikke sette inn en verdi mindre enn 10 i "Mengde" kolonne.
SQLite Foreign Key
Ocuco SQLite fremmednøkkel er en begrensning som bekrefter eksistensen av verdi i en tabell til en annen tabell som har en relasjon med den første tabellen der fremmednøkkelen er definert.
Når du arbeider med flere tabeller, når det er to tabeller som er relatert til hverandre med én kolonne til felles. Og hvis du vil sikre at verdien satt inn i en av dem må eksistere i den andre tabellens kolonne, bør du bruke en "Foreign key Constraint" på kolonnen til felles.
I dette tilfellet, når du prøver å sette inn en verdi på den kolonnen, vil fremmednøkkelen sørge for at den innsatte verdien finnes i tabellens kolonne.
Merk at begrensninger for fremmednøkler ikke er aktivert som standard i SQLite, må du aktivere dem først ved å kjøre følgende kommando:
PRAGMA foreign_keys = ON;
Utenlandske nøkkelbegrensninger ble introdusert i SQLite fra og med versjon 3.6.19.
Eksempel SQLite Foreign Key
Anta at hvis vi har to tabeller; Studenter og avdelinger.
Studenttabellen har en liste over studenter, og avdelingstabellen har en liste over avdelingene. Hver student tilhører en avdeling; dvs. hver student har en avdelings-ID-kolonne.
Nå skal vi se hvordan fremmednøkkelbegrensningen kan være nyttig for å sikre at verdien av avdelings-ID-en i elevtabellen må eksistere i avdelingstabellen.
Så hvis vi opprettet en fremmednøkkelbegrensning på DepartmentId på Studenter-tabellen, må hver innsatt departmentId presenteres 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) );
For å sjekke hvordan fremmednøkkelbegrensninger kan forhindre at udefinert element eller verdi settes inn i en tabell som har en relasjon til en annen tabell, vil vi se på følgende eksempel.
I dette eksemplet har avdelingstabellen en utenlandsk nøkkelbegrensning til tabellen Studenter, så enhver avdelings-ID-verdi som er satt inn i elevtabellen, må eksistere i avdelingstabellen. Hvis du blir forsøkt å sette inn en departmentId-verdi som ikke finnes i avdelingstabellen, vil fremmednøkkelbegrensningen hindre deg i å gjøre det.
La oss sette inn to avdelinger "DEN" og «Kunst» inn i avdelingstabellen som følger:
INSERT INTO Departments VALUES(1, 'IT'); INSERT INTO Departments VALUES(2, 'Arts');
De to setningene skal sette inn to avdelinger i avdelingstabellen, du kan sikre at de to verdiene ble satt inn ved å kjøre spørringen "VELG * FRA avdelinger" etter det:
Prøv deretter å sette inn en ny student med en avdelings-ID som ikke finnes i avdelingenes tabell:
INSERT INTO Students(StudentName,DepartmentId) VALUES('John', 5);
Raden vil ikke bli satt inn, og du vil få en feilmelding som sier at: FOREIGN KEY-begrensningen mislyktes.


