Elsődleges kulcs és idegen kulcs be SQLite példákkal

SQLite megszorítások

Az oszlopkényszerek kényszereket és szabályokat kényszerítenek ki az oszlopba beszúrt értékekre a beillesztett adatok érvényesítése érdekében. Az oszlopokra vonatkozó megszorítások a táblázat létrehozásakor, az oszlopdefinícióban vannak megadva.

SQLite Elsődleges kulcs

Az elsődleges kulcs oszlopában szereplő összes értéknek egyedinek és nem nullának kell lennie

Az elsődleges kulcs csak egy oszlopra vagy oszlopkombinációra alkalmazható, ez utóbbi esetben az oszlopok értékeinek kombinációjának egyedinek kell lennie a táblázat összes sorában.

Syntax:

Számos különböző módszer létezik egy tábla elsődleges kulcsának meghatározására, például:

  • Magában az oszlopdefinícióban:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • Külön definícióként:
    PRIMARY KEY(ColumnName);
  • Oszlopok kombinációjának létrehozása elsődleges kulcsként:
    PRIMARY KEY(ColumnName1, ColumnName2);

Nem null megkötés

SQLite A nem nulla megszorítás megakadályozza, hogy egy oszlop nulla legyen:

ColumnName INTEGER  NOT NULL;

ALAPÉRTELMEZETT kényszer

SQLite Alapértelmezett kényszer, ha nem szúr be értéket egy oszlopba, az alapértelmezett érték kerül beszúrásra.

Például:

ColumnName INTEGER DEFAULT 0;

Ha beszúrási utasítást ír, és nem adott meg értéket az oszlophoz, akkor az oszlop értéke 0 lesz.

SQLite EGYEDI kényszer

SQLite Egyedi megszorítás, amely megakadályozza az értékek megkettőzését az oszlop összes értéke között.

Például:

EmployeeId INTEGER NOT NULL UNIQUE;

Ez érvényesíteni fogja a "Munkavállalói azonosító" hogy az érték egyedi legyen, nem engedélyezett az értékek duplikálása. Vegye figyelembe, hogy ez az oszlop értékeire vonatkozik "Munkavállalói azonosító" csak.

SQLite ELLENŐRIZZE a kényszert

SQLite feltétel ellenőrzése a beillesztett érték ellenőrzéséhez, ha az érték nem egyezik a feltétellel, akkor nem kerül beillesztésre.

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

Nem szúrhat be 10-nél kisebb értéket a "Mennyiség" oszlop.

SQLite Idegen kulcs

A SQLite Az idegen kulcs egy olyan megszorítás, amely ellenőrzi az egyik táblában lévő érték meglétét egy másik táblához, amely kapcsolatban áll az első táblával, ahol az idegen kulcsot meghatározták.

Ha több táblával dolgozik, amikor két olyan táblázat van, amelyek egy közös oszloppal kapcsolódnak egymáshoz. Ha pedig azt szeretné, hogy az egyikbe beszúrt érték a másik tábla oszlopában is szerepeljen, akkor az oszlopon közösen használjon „Külön kulcs kényszert”.

Ebben az esetben, amikor megpróbál egy értéket beszúrni az oszlopba, akkor az idegen kulcs biztosítja, hogy a beszúrt érték szerepeljen a táblázat oszlopában.

Vegye figyelembe, hogy az idegen kulcsokra vonatkozó megszorítások alapértelmezés szerint nincsenek engedélyezve SQLite, először engedélyeznie kell őket a következő paranccsal:

PRAGMA foreign_keys = ON;

Az idegen kulcsok megszorításait ben vezették be SQLite a 3.6.19-es verziótól kezdve.

Például az SQLite Idegen kulcs

Tegyük fel, hogy két táblánk van; Diákok és Tanszékek.

A Hallgatók táblázat a hallgatók listáját tartalmazza, a Tanszékek táblában pedig a tanszékek listája. Minden hallgató egy tanszékhez tartozik; azaz minden tanulónak van egy osztályazonosító oszlopa.

Most meglátjuk, hogyan segíthet az idegen kulcs megszorítása annak biztosításában, hogy a tanulók táblájában szereplő osztályazonosító értékének szerepelnie kell a tanszéki táblában.

SQLite Idegen kulcs

Tehát, ha létrehoztunk egy idegen kulcs megszorítást a Tanulók tábla DepartmentId-jére, akkor minden beszúrt osztályazonosítónak meg kell jelennie a Tanszékek táblában.

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

Annak ellenőrzésére, hogy az idegenkulcs-megszorítások hogyan akadályozhatják meg nem definiált elem vagy érték beszúrását egy másik táblával kapcsolatos táblába, a következő példát tekintjük át.

Ebben a példában a Tanszékek tábla rendelkezik egy Idegenkulcs-megszorítással a Hallgatók táblával szemben, így a hallgatói táblába beszúrt bármely DepartmentId értéknek léteznie kell a tanszéktáblában. Ha olyan DepartmentId értéket próbál meg beszúrni, amely nem létezik a Departments táblában, az idegen kulcs megszorítása megakadályozza ezt.

Szúrjunk be két osztályt "AZT" és a „Művészetek” az osztályok táblázatába a következőképpen:

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

A két utasításnak két osztályt kell beillesztenie a részlegek táblájába, a lekérdezés futtatásával meggyőződhet arról, hogy a két érték beszúrásra került. „SELECT * FROM Részlegek” azt követően:

SQLite Idegen kulcs

Ezután próbáljon meg beszúrni egy új hallgatót olyan osztályazonosítóval, amely nem létezik a tanszékek táblázatában:

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

A sor nem kerül beszúrásra, és a következő hibaüzenet jelenik meg: A FORIGN KEY kényszer nem sikerült.