Klucz podstawowy i klucz obcy SQLite z przykładami

SQLite ograniczenia

Ograniczenia kolumn wymuszają ograniczenia i reguły dotyczące wartości wstawionych w kolumnie w celu sprawdzenia poprawności wstawionych danych. Ograniczenia kolumn definiuje się podczas tworzenia tabeli, w definicji kolumny.

SQLite Główny klucz

Wszystkie wartości w kolumnie klucza podstawowego powinny być unikalne i nie powinny mieć wartości null

Klucz podstawowy można zastosować tylko do jednej kolumny lub do kombinacji kolumn, w tym drugim przypadku kombinacja wartości kolumn powinna być unikalna dla wszystkich wierszy tabeli.

Składnia:

Istnieje wiele różnych sposobów definiowania klucza podstawowego w tabeli, np.:

  • W samej definicji kolumny:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • Jako osobna definicja:
    PRIMARY KEY(ColumnName);
  • Aby utworzyć kombinację kolumn jako klucz podstawowy:
    PRIMARY KEY(ColumnName1, ColumnName2);

Nie ograniczenie zerowe

SQLite Ograniczenie Not null zapobiega przyjmowaniu przez kolumnę wartości null:

ColumnName INTEGER  NOT NULL;

Domyślne ograniczenie

SQLite Domyślne ograniczenie Jeśli nie wstawisz żadnej wartości w kolumnie, zamiast niej zostanie wstawiona wartość domyślna.

Na przykład:

ColumnName INTEGER DEFAULT 0;

Jeśli napiszesz instrukcję wstawiania i nie określisz żadnej wartości dla tej kolumny, kolumna będzie miała wartość 0.

SQLite UNIKALNE ograniczenie

SQLite Unikalne ograniczenie zapobiegnie duplikowaniu wartości wśród wszystkich wartości kolumny.

Na przykład:

EmployeeId INTEGER NOT NULL UNIQUE;

To wymusi "Dowód pracownika" wartość jest unikalna, żadne zduplikowane wartości nie będą dozwolone. Należy pamiętać, że dotyczy to wartości kolumny "Dowód pracownika" tylko.

SQLite SPRAWDŹ ograniczenie

SQLite sprawdź warunek ograniczenia, aby sprawdzić wpisaną wartość. Jeśli wartość nie pasuje do warunku, nie zostanie wstawiona.

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

Nie można wstawić wartości mniejszej niż 10 w pliku "Ilość" Kolumna.

SQLite klucz obcy

Kurs SQLite klucz obcy to ograniczenie weryfikujące istnienie wartości występującej w jednej tabeli w innej tabeli, mającej związek z pierwszą tabelą, w której zdefiniowany jest klucz obcy.

Podczas pracy z wieloma tabelami, gdy istnieją dwie tabele powiązane ze sobą jedną wspólną kolumną. A jeśli chcesz mieć pewność, że wartość wstawiona w jednej z nich musi istnieć w kolumnie drugiej tabeli, powinieneś zastosować „Ograniczenie klucza obcego” we wspólnej kolumnie.

W takim przypadku, gdy spróbujesz wstawić wartość w tej kolumnie, klucz obcy zapewni, że wstawiona wartość istnieje w kolumnie tabeli.

Należy pamiętać, że ograniczenia dotyczące kluczy obcych nie są domyślnie włączone w programie SQLite, musisz je najpierw włączyć, uruchamiając następujące polecenie:

PRAGMA foreign_keys = ON;

Wprowadzono ograniczenia klucza obcego SQLite począwszy od wersji 3.6.19.

Przykład SQLite klucz obcy

Załóżmy, że mamy dwie tabele; Studenci i Wydziały.

Tabela Studenci zawiera listę studentów, a tabela wydziałów zawiera listę wydziałów. Każdy student należy do wydziału; tzn. każdy student ma kolumnę DepartmentId.

Zobaczymy teraz, w jaki sposób ograniczenie klucza obcego może być pomocne w zapewnieniu, że wartość identyfikatora wydziału w tabeli studentów musi istnieć w tabeli działów.

SQLite klucz obcy

Jeśli więc utworzyliśmy ograniczenie klucza obcego dla identyfikatora działu w tabeli Studenci, każdy wstawiony identyfikator działu będzie musiał być prezentowany w tabeli Działy.

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

Aby sprawdzić, w jaki sposób ograniczenia klucza obcego mogą zapobiec wstawieniu niezdefiniowanego elementu lub wartości do tabeli, która jest powiązana z inną tabelą, przyjrzymy się poniższemu przykładowi.

W tym przykładzie tabela Działy ma ograniczenie klucza obcego dla tabeli Studenci, zatem każda wartość DepartmentId wstawiona do tabeli Studenci musi istnieć w tabeli działów. Jeśli spróbujesz wstawić wartość DepartmentId, która nie istnieje w tabeli działów, ograniczenie klucza obcego uniemożliwi to.

Dodajmy dwa działy "TO" i „Sztuka” do tabeli działów w następujący sposób:

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

Te dwie instrukcje powinny wstawić dwa działy do ​​tabeli działów. Możesz upewnić się, że te dwie wartości zostały wstawione, uruchamiając zapytanie „WYBIERZ * Z działów” po tym:

SQLite klucz obcy

Następnie spróbuj wstawić nowego ucznia z identyfikatorem wydziału, który nie istnieje w tabeli wydziałów:

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

Wiersz nie zostanie wstawiony i pojawi się komunikat o błędzie: Ograniczenie KLUCZ OBCY nie powiodło się.