sql >> Databasteknik >  >> RDS >> SQLite

Hur man aktiverar stöd för främmande nyckel i SQLite

I SQLite tillämpas inte begränsningar för främmande nyckel om inte stöd för främmande nyckel har aktiverats.

Att aktivera främmande nycklar innebär följande:

  1. Aktivera främmande nycklar vid kompilering av SQLite.
  2. Aktivera främmande nycklar vid körning.

Aktivera främmande nycklar vid kompilering av SQLite

När det gäller att kompilera SQLite är det inte så mycket en fråga om att aktivera främmande nycklar – det är mer en fråga om att inte inaktivera dem.

Att aktivera främmande nycklar vid kompilering av SQLite betyder helt enkelt att du inte använder SQLITE_OMIT_FOREIGN_KEY och SQLITE_OMIT_TRIGGER när du kompilerar den.

Om SQLITE_OMIT_TRIGGER är definierad men SQLITE_OMIT_FOREIGN_KEY inte är det, då analyseras definitioner av främmande nyckel och kan efterfrågas med PRAGMA foreign_key_list , men begränsningar för främmande nyckel tillämpas inte. PRAGMA foreign_keys kommandot är ett no-op i den här konfigurationen.

Om OMIT_FOREIGN_KEY är definierad, kan definitioner av främmande nyckel inte ens analyseras (försök att ange en definition av främmande nyckel är ett syntaxfel).

Aktivera främmande nycklar vid körning

Även när biblioteket har kompilerats med begränsningar för främmande nyckel aktiverade, måste du fortfarande aktivera stöd för främmande nyckel under körning.

Du kan göra detta med följande kod:

PRAGMA foreign_keys = ON;

Som med de flesta PRAGMA satser, kan du alternativt ersätta ON med TRUE , YES , eller 1 .

När du har kört det kommer dina främmande nycklar att upprätthållas.

Observera att den här inställningen inte krävs för att skapa främmande nycklar, men det krävs för att upprätthålla främmande nycklar.

Andra anslutningar

Observera att detta endast aktiverar begränsningar för främmande nyckel för den aktuella databasanslutningen.

Om du öppnar en ny anslutning måste du köra den satsen igen om du vill att främmande nycklar ska upprätthållas i den anslutningen.

Kontrollera stöd för främmande nyckel för den aktuella anslutningen

Du kan också kontrollera om främmande nycklar redan har aktiverats för din nuvarande anslutning genom att köra följande kod.

PRAGMA foreign_keys;

Resultat:

1

I mitt fall har jag redan aktiverat främmande nycklar för den här anslutningen så resultatet är 1. Om främmande nycklar inaktiverades skulle resultatet bli 0.

Här är ett exempel på att inaktivera, kontrollera värdet och sedan aktivera och kontrollera värdet igen.

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

Resultat:

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. SQL-fråga för att dela upp kolumndata i rader

  2. Vad gör pg_escape_string exakt?

  3. 4 sätt att formatera ett tal utan decimaler i Oracle

  4. Hur INTE REGEXP fungerar i MariaDB