Первинний ключ і зовнішній ключ SQLite з прикладами
SQLite Обмеження
Обмеження стовпця застосовують обмеження та правила до значень, вставлених у стовпець, щоб перевірити вставлені дані. Обмеження стовпців визначаються під час створення таблиці у визначенні стовпця.
SQLite Первинний ключ
Усі значення в стовпці первинного ключа мають бути унікальними, а не нульовими
Первинний ключ може бути застосований тільки до одного стовпця або до комбінації стовпців, в останньому випадку комбінація значень стовпців повинна бути унікальною для всіх рядків таблиці.
Синтаксис:
Існує багато різних способів визначення первинного ключа в таблиці, наприклад:
- У самому визначенні стовпця:
ColumnName INTEGER NOT NULL PRIMARY KEY;
- Як окреме визначення:
PRIMARY KEY(ColumnName);
- Щоб створити комбінацію стовпців як первинний ключ:
PRIMARY KEY(ColumnName1, ColumnName2);
Не нульове обмеження
SQLite Обмеження Not null запобігає тому, щоб стовпець мав нульове значення:
ColumnName INTEGER NOT NULL;
Обмеження DEFAULT
SQLite Обмеження за замовчуванням, якщо ви не вставите значення в стовпець, замість нього буде вставлено значення за замовчуванням.
Наприклад:
ColumnName INTEGER DEFAULT 0;
Якщо ви пишете оператор вставки, і ви не вказали значення для цього стовпця, стовпець матиме значення 0.
SQLite УНІКАЛЬНЕ обмеження
SQLite Унікальне обмеження запобігає дублюванню значень серед усіх значень стовпця.
Наприклад:
EmployeeId INTEGER NOT NULL UNIQUE;
Це забезпечить дотримання «Ідентифікатор працівника» значення має бути унікальним, дубльовані значення не допускаються. Зауважте, що це стосується значень стовпця «Ідентифікатор працівника» тільки.
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 Зовнішній ключ
Припустимо, якщо у нас є дві таблиці; Студенти та кафедри.
У таблиці «Студенти» міститься список студентів, а в таблиці «Департаменти» — список кафедр. Кожен студент належить до кафедри; тобто кожен студент має стовпець 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, яке не існує в таблиці departments, обмеження зовнішнього ключа завадить вам це зробити.
Вставимо два відділи “ІТ” та «Мистецтво» в таблицю відділів наступним чином:
INSERT INTO Departments VALUES(1, 'IT'); INSERT INTO Departments VALUES(2, 'Arts');
Два оператори повинні вставити два відділи в таблицю відділів, ви можете переконатися, що два значення вставлено, виконавши запит «ВИБРАТИ * З Відділів» після того:
Потім спробуйте вставити нового студента з ідентифікатором відділу, якого немає в таблиці відділів:
INSERT INTO Students(StudentName,DepartmentId) VALUES('John', 5);
Рядок не буде вставлено, і ви отримаєте повідомлення про помилку: Помилка обмеження FOREIGN KEY.