sql >> Base de Datos >  >> RDS >> SQLite

Cómo habilitar el soporte de clave externa en SQLite

En SQLite, las restricciones de clave externa no se aplican a menos que se haya habilitado el soporte de clave externa.

Habilitar claves foráneas implica lo siguiente:

  1. Habilite claves foráneas al compilar SQLite.
  2. Habilitar claves foráneas en tiempo de ejecución.

Habilitar claves foráneas al compilar SQLite

Cuando se trata de compilar SQLite, no se trata tanto de habilitar claves foráneas:es más una cuestión de no deshabilitar ellos.

Habilitar claves externas al compilar SQLite simplemente significa que no usa SQLITE_OMIT_FOREIGN_KEY y SQLITE_OMIT_TRIGGER al compilarlo.

Si SQLITE_OMIT_TRIGGER está definido pero SQLITE_OMIT_FOREIGN_KEY no lo es, entonces las definiciones de clave externa se analizan y se pueden consultar usando PRAGMA foreign_key_list , pero no se aplican restricciones de clave externa. Las PRAGMA foreign_keys El comando no es operativo en esta configuración.

Si OMIT_FOREIGN_KEY está definida, entonces las definiciones de clave externa ni siquiera se pueden analizar (intentar especificar una definición de clave externa es un error de sintaxis).

Habilitar claves foráneas en tiempo de ejecución

Incluso cuando la biblioteca se ha compilado con las restricciones de claves externas habilitadas, aún debe habilitar la compatibilidad con claves externas en tiempo de ejecución.

Puedes hacerlo con el siguiente código:

PRAGMA foreign_keys = ON;

Como ocurre con la mayoría de PRAGMA declaraciones, alternativamente podría reemplazar ON con TRUE , YES , o 1 .

Una vez que haya ejecutado eso, se aplicarán sus claves foráneas.

Tenga en cuenta que esta configuración no es necesaria para crear claves foráneas, pero es necesario para hacer cumplir claves foráneas.

Otras conexiones

Tenga en cuenta que esto solo habilita restricciones de clave externa para la conexión de base de datos actual.

Si abre una nueva conexión, deberá ejecutar esa declaración nuevamente si desea que se apliquen claves externas en esa conexión.

Comprobar la compatibilidad con claves externas para la conexión actual

También puede verificar si las claves externas ya se han habilitado o no para su conexión actual ejecutando el siguiente código.

PRAGMA foreign_keys;

Resultado:

1

En mi caso, ya he habilitado claves externas para esta conexión, por lo que el resultado es 1. Si las claves externas estuvieran deshabilitadas, el resultado sería 0.

Aquí hay un ejemplo de deshabilitar, verificar el valor, luego habilitar y volver a verificar el valor.

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

Resultado:

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