Ensisijainen avain ja vierasavain sisään SQLite esimerkkien kanssa

SQLite rajoitteet

Sarakerajoitukset pakottavat rajoituksia ja sääntöjä sarakkeeseen lisätyille arvoille lisätyn tiedon vahvistamiseksi. Sarakerajoitukset määritellään taulukkoa luotaessa sarakemäärityksessä.

SQLite Pääavain

Kaikkien perusavainsarakkeen arvojen tulee olla yksilöllisiä eikä tyhjiä

Ensisijaista avainta voidaan käyttää vain yhteen sarakkeeseen tai sarakkeiden yhdistelmään, jälkimmäisessä tapauksessa sarakkeiden arvojen yhdistelmän tulee olla yksilöllinen kaikille taulukon riveille.

Syntaksi:

Taulukon ensisijaisen avaimen määrittämiseen on monia eri tapoja, kuten:

  • Itse sarakkeen määritelmässä:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • Erillisenä määritelmänä:
    PRIMARY KEY(ColumnName);
  • Sarakkeiden yhdistelmän luominen ensisijaiseksi avaimeksi:
    PRIMARY KEY(ColumnName1, ColumnName2);

Ei nollarajoitus

SQLite Ei nolla -rajoitus estää sarakkeelle nolla-arvon:

ColumnName INTEGER  NOT NULL;

OLETUSrajoitus

SQLite Oletusrajoitus, jos et lisää mitään arvoa sarakkeeseen, oletusarvo lisätään sen sijaan.

Esimerkiksi:

ColumnName INTEGER DEFAULT 0;

Jos kirjoitat insert-käskyn etkä määrittänyt tälle sarakkeelle mitään arvoa, sarakkeen arvo on 0.

SQLite AINUTLAATUINEN rajoitus

SQLite Ainutlaatuinen rajoitus estää arvojen päällekkäisyyden sarakkeen kaikkien arvojen kesken.

Esimerkiksi:

EmployeeId INTEGER NOT NULL UNIQUE;

Tämä pannaan täytäntöön "Henkilöstökortti" arvo on ainutlaatuinen, päällekkäisiä arvoja ei sallita. Huomaa, että tämä koskee sarakkeen arvoja "Henkilöstökortti" vain.

SQLite TARKISTA rajoitus

SQLite tarkista rajoitus ehto tarkistaaksesi lisätyn arvon. Jos arvo ei vastaa ehtoa, sitä ei lisätä.

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

Et voi lisätä arvoa alle 10 "Määrä" sarake.

SQLite viiteavain

- SQLite vieras avain on rajoite, joka varmistaa arvon olemassaolon yhdessä taulukossa toiseen taulukkoon, jolla on suhde ensimmäiseen taulukkoon, jossa vierasavain on määritelty.

Kun työskentelet useiden taulukoiden kanssa, kun on olemassa kaksi taulukkoa, jotka liittyvät toisiinsa yhdellä yhteisellä sarakkeella. Ja jos haluat varmistaa, että johonkin niistä lisätyn arvon on oltava toisen taulukon sarakkeessa, sinun tulee käyttää sarakkeessa yhteistä "Foreign Key Constraint" -asetusta.

Tässä tapauksessa, kun yrität lisätä arvon kyseiseen sarakkeeseen, vierasavain varmistaa, että lisätty arvo on olemassa taulukon sarakkeessa.

Huomaa, että vieraiden avainten rajoitukset eivät ole oletusarvoisesti käytössä SQLite, sinun on ensin otettava ne käyttöön suorittamalla seuraava komento:

PRAGMA foreign_keys = ON;

Vieraiden avainten rajoitukset otettiin käyttöön SQLite versiosta 3.6.19 alkaen.

Esimerkki SQLite viiteavain

Oletetaan, että meillä on kaksi taulukkoa; Opiskelijat ja laitokset.

Opiskelijat-taulukossa on luettelo opiskelijoista ja osastotaulukossa on luettelo osastoista. Jokainen opiskelija kuuluu osastolle; eli jokaisella opiskelijalla on osastoId-sarake.

Katsotaan nyt, kuinka vieraan avaimen rajoitus voi olla hyödyllinen varmistamaan, että opiskelijataulukon osastotunnuksen arvon on oltava osastotaulukossa.

SQLite viiteavain

Joten jos loimme vieraan avaimen rajoitteen Opiskelijat-taulukon OsastoId:lle, jokaisen lisätyn osastotunnuksen on esitettävä Osastot-taulukossa.

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

Tarkastelemme seuraavaa esimerkkiä, kuinka vieraiden avainten rajoitukset voivat estää määrittelemättömän elementin tai arvon lisäämisen taulukkoon, jolla on suhde toiseen taulukkoon.

Tässä esimerkissä Osastot-taulukossa on Vieraan avaimen rajoitus Opiskelijat-taulukkoon, joten minkä tahansa opiskelijataulukkoon lisätyn DepartmentId-arvon on oltava osastotaulukossa. Jos yrität lisätä osastotunnus-arvon, jota ei ole osastotaulukossa, vierasavaimen rajoitus estää sinua tekemästä sitä.

Lisätään kaksi osastoa "SE" ja "Taiteet" osastotaulukkoon seuraavasti:

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

Kahden lauseen tulisi lisätä kaksi osastoa osastotaulukkoon. Voit varmistaa, että nämä kaksi arvoa lisättiin suorittamalla kysely "VALITSE * osastoilta" sen jälkeen:

SQLite viiteavain

Yritä sitten lisätä uusi opiskelija, jolla on osastotunnus, jota ei ole osastojen taulukossa:

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

Riviä ei lisätä, ja saat virheilmoituksen, jossa sanotaan, että: FOREIGN KEY -rajoitus epäonnistui.