В SQLite ограниченията на външния ключ не се налагат, освен ако не е активирана поддръжка на външни ключове.
Активирането на външни ключове включва следното:
- Разрешаване на външни ключове при компилиране на SQLite.
- Активиране на външни ключове по време на изпълнение.
Активиране на външни ключове при компилиране на SQLite
Когато става въпрос за компилиране на SQLite, не е толкова въпрос на активиране външни ключове – това е по-скоро въпрос на не деактивиране тях.
Активирането на външни ключове при компилиране на SQLite просто означава, че не използвате SQLITE_OMIT_FOREIGN_KEY
и SQLITE_OMIT_TRIGGER
при компилирането му.
Ако SQLITE_OMIT_TRIGGER
е дефиниран, но SQLITE_OMIT_FOREIGN_KEY
не е, тогава дефинициите на външния ключ се анализират и могат да бъдат запитани с помощта на PRAGMA foreign_key_list
, но ограниченията на външния ключ не се прилагат. PRAGMA foreign_keys
командата е без операция в тази конфигурация.
Ако OMIT_FOREIGN_KEY
е дефиниран, тогава дефинициите на външния ключ дори не могат да бъдат анализирани (опитът да се посочи дефиниция на външен ключ е синтактична грешка).
Активиране на външни ключове по време на изпълнение
Дори когато библиотеката е компилирана с разрешени ограничения на външния ключ, все още трябва да активирате поддръжката на външни ключове по време на изпълнение.
Можете да направите това със следния код:
PRAGMA foreign_keys = ON;
Както при повечето PRAGMA
изрази, можете алтернативно да замените ON
с TRUE
, YES
, или 1
.
След като го стартирате, външните ви ключове ще бъдат наложени.
Имайте предвид, че тази настройка не е необходима за създаване външни ключове, но е необходимо за налагане външни ключове.
Други връзки
Имайте предвид, че това позволява само ограничения на външния ключ за текущата връзка с базата данни.
Ако отворите нова връзка, ще трябва да изпълните този израз отново, ако искате външните ключове да бъдат наложени в тази връзка.
Проверете поддръжката на външни ключове за текущата връзка
Можете също да проверите дали външните ключове вече са активирани за текущата ви връзка, като изпълните следния код.
PRAGMA foreign_keys;
Резултат:
1
В моя случай вече съм активирал външни ключове за тази връзка, така че резултатът е 1. Ако външните ключове са били деактивирани, резултатът ще бъде 0.
Ето пример за деактивиране, проверка на стойността, след това активиране и повторна проверка на стойността.
PRAGMA foreign_keys = FALSE;
PRAGMA foreign_keys;
PRAGMA foreign_keys = YES;
PRAGMA foreign_keys;
Резултат:
sqlite> PRAGMA foreign_keys = FALSE; sqlite> PRAGMA foreign_keys; foreign_keys ------------ 0 sqlite> PRAGMA foreign_keys = YES; sqlite> PRAGMA foreign_keys; foreign_keys ------------ 1