SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Jak włączyć obsługę kluczy obcych w SQLite?

W SQLite ograniczenia kluczy obcych nie są wymuszane, chyba że obsługa kluczy obcych jest włączona.

Włączenie kluczy obcych obejmuje następujące czynności:

  1. Włącz klucze obce podczas kompilacji SQLite.
  2. Włącz klucze obce w czasie wykonywania.

Włącz klucze obce podczas kompilacji SQLite

Jeśli chodzi o kompilację SQLite, nie chodzi o włączenie klucze obce – bardziej chodzi o nie wyłączanie ich.

Włączenie kluczy obcych podczas kompilacji SQLite oznacza po prostu, że nie używasz SQLITE_OMIT_FOREIGN_KEY i SQLITE_OMIT_TRIGGER podczas kompilacji.

Jeśli SQLITE_OMIT_TRIGGER jest zdefiniowany, ale SQLITE_OMIT_FOREIGN_KEY nie jest, definicje kluczy obcych są analizowane i mogą być odpytywane za pomocą PRAGMA foreign_key_list , ale ograniczenia klucza obcego nie są wymuszane. PRAGMA foreign_keys w tej konfiguracji polecenie jest nie do wykonania.

Jeśli OMIT_FOREIGN_KEY jest zdefiniowany, wtedy definicje klucza obcego nie mogą być nawet analizowane (próba określenia definicji klucza obcego jest błędem składni).

Włącz klucze obce w czasie wykonywania

Nawet jeśli biblioteka została skompilowana z włączonymi ograniczeniami klucza obcego, nadal musisz włączyć obsługę klucza obcego w czasie wykonywania.

Możesz to zrobić za pomocą następującego kodu:

PRAGMA foreign_keys = ON;

Jak w przypadku większości PRAGMA oświadczenia, możesz alternatywnie zastąpić ON z TRUE , YES lub 1 .

Gdy to zrobisz, twoje klucze obce zostaną wymuszone.

Pamiętaj, że to ustawienie nie jest wymagane do tworzenia klucze obce, ale jest to wymagane do wymuszania klucze obce.

Inne połączenia

Zauważ, że włącza to tylko ograniczenia klucza obcego dla bieżącego połączenia z bazą danych.

Jeśli otworzysz nowe połączenie, musisz ponownie uruchomić tę instrukcję, jeśli chcesz, aby klucze obce były wymuszone w tym połączeniu.

Sprawdź obsługę kluczy obcych dla bieżącego połączenia

Możesz również sprawdzić, czy klucze obce zostały już włączone dla bieżącego połączenia, uruchamiając następujący kod.

PRAGMA foreign_keys;

Wynik:

1

W moim przypadku włączyłem już klucze obce dla tego połączenia, więc wynik to 1. Jeśli klucze obce zostały wyłączone, wynikiem będzie 0.

Oto przykład wyłączenia, sprawdzenia wartości, a następnie włączenia i ponownego sprawdzenia wartości.

PRAGMA foreign_keys = FALSE;
PRAGMA foreign_keys;
PRAGMA foreign_keys = YES;
PRAGMA foreign_keys;

Wynik:

sqlite> PRAGMA foreign_keys = FALSE;
sqlite> PRAGMA foreign_keys;
foreign_keys
------------
0           
sqlite> PRAGMA foreign_keys = YES;
sqlite> PRAGMA foreign_keys;
foreign_keys
------------
1           

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite - Upuść tabelę

  2. Wyświetlaj postęp podczas wykonywania w tle

  3. Jak zaktualizować istniejące dane za pomocą SQLite

  4. Autoinkrementacja klucza SQLite PRIMARY nie działa

  5. Utwórz tabelę tymczasową w SQLite