Първичен ключ и външен ключ SQLite с примери

SQLite Ограничения

Ограниченията на колоните налагат ограничения и правила за стойностите, вмъкнати в колона, за да валидират вмъкнатите данни. Ограниченията на колоните се дефинират при създаване на таблица, в дефиницията на колона.

SQLite Първичен ключ

Всички стойности в колона с първичен ключ трябва да са уникални, а не нула

Първичният ключ може да бъде приложен само към една колона или към комбинация от колони, като във втория случай комбинацията от стойностите на колоните трябва да е уникална за всички редове на таблицата.

Синтаксис:

Има много различни начини за дефиниране на първичен ключ в таблица като:

  • В самата дефиниция на колоната:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • Като отделна дефиниция:
    PRIMARY KEY(ColumnName);
  • За да създадете комбинация от колони като първичен ключ:
    PRIMARY KEY(ColumnName1, ColumnName2);

Не е нулево ограничение

SQLite Ограничението Not null не позволява колона да има нулева стойност:

ColumnName INTEGER  NOT NULL;

Ограничение ПО ПОДРАЗБИРАНЕ

SQLite Ограничение по подразбиране, ако не вмъкнете никаква стойност в колона, вместо това ще бъде вмъкната стойността по подразбиране.

Например:

ColumnName INTEGER DEFAULT 0;

Ако напишете оператор за вмъкване и не сте посочили никаква стойност за тази колона, колоната ще има стойност 0.

SQLite УНИКАЛНО ограничение

SQLite Уникално ограничение, то ще предотврати дублиращи се стойности сред всички стойности на колоната.

Например:

EmployeeId INTEGER NOT NULL UNIQUE;

Това ще наложи „EmployeeId“ стойността да бъде уникална, няма да се допускат дублирани стойности. Имайте предвид, че това се отнася за стойностите на колоната „EmployeeId“ само

SQLite Ограничение CHECK

SQLite check constraint условие за проверка на вмъкната стойност, ако стойността не отговаря на условието, тя няма да бъде вмъкната.

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

Не можете да вмъкнете стойност, по-малка от 10 в „Количество“ колона.

SQLite Чужд ключ

- SQLite външен ключ е ограничение, което проверява съществуването на стойност, присъстваща в една таблица към друга таблица, която има връзка с първата таблица, където е дефиниран външният ключ.

Докато работите с множество таблици, когато има две таблици, които са свързани една с друга с една обща колона. И ако искате да сте сигурни, че стойността, вмъкната в една от тях, трябва да съществува в колоната на другата таблица, тогава трябва да използвате „Ограничение за чужд ключ“ в общата колона.

В този случай, когато се опитате да вмъкнете стойност в тази колона, външният ключ ще гарантира, че вмъкнатата стойност съществува в колоната на таблицата.

Обърнете внимание, че ограниченията за външни ключове не са активирани по подразбиране в SQLite, първо трябва да ги активирате, като изпълните следната команда:

PRAGMA foreign_keys = ON;

Въведени са ограничения за външен ключ SQLite започвайки от версия 3.6.19.

Пример за SQLite Чужд ключ

Да предположим, че имаме две маси; Студенти и отдели.

Таблицата Students има списък със студенти, а таблицата Departments има списък с отделите. Всеки студент принадлежи към отдел; т.е. всеки студент има колона DepartmentId.

Сега ще видим как ограничението на външния ключ може да бъде полезно, за да се гарантира, че стойността на идентификатора на отдела в таблицата студенти трябва да съществува в таблицата на отделите.

SQLite Чужд ключ

Така че, ако създадохме ограничение на външен ключ за DepartmentId в таблицата Students, всеки вмъкнат departmentId трябва да присъства в таблицата Departments.

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

За да проверим как ограниченията на външния ключ могат да предотвратят вмъкването на недефиниран елемент или стойност в таблица, която има връзка с друга таблица, ще разгледаме следния пример.

В този пример таблицата Departments има ограничение за външен ключ към таблицата Students, така че всяка стойност на departmentId, вмъкната в таблицата students трябва да съществува в таблицата Departments. Ако се опитате да вмъкнете стойност за departmentId, която не съществува в таблицата с отдели, ограничението за външен ключ ще ви попречи да направите това.

Нека вмъкнем два отдела "ТО" намлява „изкуства“ в таблицата на отделите, както следва:

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

Двата израза трябва да вмъкнат два отдела в таблицата с отдели, можете да се уверите, че двете стойности са вмъкнати, като изпълните заявката „ИЗБЕРЕТЕ * ОТ отдели“ след това:

SQLite Чужд ключ

След това опитайте да вмъкнете нов студент с идентификатор на отдел, който не съществува в таблицата на отделите:

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

Редът няма да бъде вмъкнат и ще получите съобщение за грешка, че: Ограничението FOREIGN KEY е неуспешно.

Обобщете тази публикация с: