Първичен ключ и външен ключ 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.
Сега ще видим как ограничението на външния ключ може да бъде полезно, за да се гарантира, че стойността на идентификатора на отдела в таблицата студенти трябва да съществува в таблицата на отделите.
Така че, ако създадохме ограничение на външен ключ за 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');
Двата израза трябва да вмъкнат два отдела в таблицата с отдели, можете да се уверите, че двете стойности са вмъкнати, като изпълните заявката „ИЗБЕРЕТЕ * ОТ отдели“ след това:
След това опитайте да вмъкнете нов студент с идентификатор на отдел, който не съществува в таблицата на отделите:
INSERT INTO Students(StudentName,DepartmentId) VALUES('John', 5);
Редът няма да бъде вмъкнат и ще получите съобщение за грешка, че: Ограничението FOREIGN KEY е неуспешно.


