sql >> Database teknologi >  >> RDS >> SQLite

Sådan aktiverer du understøttelse af fremmed nøgle i SQLite

I SQLite håndhæves begrænsninger for fremmed nøgle ikke, medmindre understøttelse af fremmed nøgle er blevet aktiveret.

Aktivering af fremmede nøgler involverer følgende:

  1. Aktiver fremmednøgler ved kompilering af SQLite.
  2. Aktiver fremmednøgler under kørsel.

Aktiver fremmednøgler ved kompilering af SQLite

Når det kommer til at kompilere SQLite, er det ikke så meget et spørgsmål om at aktivere fremmednøgler – det er mere et spørgsmål om ikke at deaktivere dem.

Aktivering af fremmednøgler ved kompilering af SQLite betyder simpelthen, at du ikke bruger SQLITE_OMIT_FOREIGN_KEY og SQLITE_OMIT_TRIGGER når den kompileres.

Hvis SQLITE_OMIT_TRIGGER er defineret, men SQLITE_OMIT_FOREIGN_KEY er det ikke, så analyseres udenlandsk nøgledefinitioner og kan forespørges ved hjælp af PRAGMA foreign_key_list , men udenlandske nøglebegrænsninger håndhæves ikke. PRAGMA foreign_keys kommandoen er en no-op i denne konfiguration.

Hvis OMIT_FOREIGN_KEY er defineret, så kan fremmednøgledefinitioner ikke engang parses (forsøg på at angive en fremmednøgledefinition er en syntaksfejl).

Aktiver fremmednøgler ved kørsel

Selv når biblioteket er blevet kompileret med fremmednøgle-begrænsninger aktiveret, skal du stadig aktivere fremmednøgleunderstøttelse under kørsel.

Du kan gøre dette med følgende kode:

PRAGMA foreign_keys = ON;

Som med de fleste PRAGMA sætninger, kan du alternativt erstatte ON med TRUE , YES eller 1 .

Når du har kørt det, vil dine fremmednøgler blive håndhævet.

Bemærk, at denne indstilling ikke er nødvendig for at oprette fremmednøgler, men det er påkrævet for at håndhæve fremmednøgler.

Andre forbindelser

Bemærk, at dette kun aktiverer fremmednøglebegrænsninger for den aktuelle databaseforbindelse.

Hvis du åbner en ny forbindelse, skal du køre denne erklæring igen, hvis du ønsker, at fremmednøgler skal håndhæves i den forbindelse.

Tjek understøttelse af fremmednøgle for den aktuelle forbindelse

Du kan også kontrollere, om fremmednøgler allerede er blevet aktiveret for din nuværende forbindelse ved at køre følgende kode.

PRAGMA foreign_keys;

Resultat:

1

I mit tilfælde har jeg allerede aktiveret fremmednøgler for denne forbindelse, så resultatet er 1. Hvis fremmednøgler blev deaktiveret, ville resultatet være 0.

Her er et eksempel på at deaktivere, kontrollere værdien og derefter aktivere og kontrollere værdien 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. Bedste måde at slette millioner af rækker efter ID

  2. Henter komplette fejlmeddelelser i isql

  3. Jeg får en Der blev gjort forsøg på at indlæse et program med en forkert formatfejl på et SQL Server-replikeringsprojekt

  4. sql gruppe efter versus distinkt