SQLite: eliminar clave externa

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

SQLite: eliminar clave externa

Este tutorial de SQLite explica cómo eliminar clave foránea En SQLite, con sintaxis y ejemplos.

describir

Después de crear una clave externa, es posible que desee eliminar la clave externa de la tabla. Exploremos cómo hacer esto.

propina: No puede usar ALTER TABLE para descartar claves foráneas porque SQLite no admite DROP CONSTRAINT en declaraciones ALTER TABLE. Sin embargo, en este tutorial le mostraremos una solución alternativa que le permite colocar claves externas en tablas existentes.

Cómo eliminar una clave externa en la tabla

No puede soltar claves foráneas en SQLite usando la instrucción ALTER TABLE. En su lugar, debe cambiar el nombre de la tabla, crear una nueva tabla sin claves externas y copiar los datos en la nueva tabla.

sintaxis

La sintaxis para colocar una clave externa en SQLite es:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE table1 RENAME TO _table1_old;

CREATE TABLE table1
(
  column1 datatype [ NULL | NOT NULL ],
  column2 datatype [ NULL | NOT NULL ],
  ...
);

INSERT INTO table1 SELECT * FROM _table1_old;

COMMIT;

PRAGMA foreign_keys=on;

ejemplo

Si creó una clave externa en SQLite como esta:

CREATE TABLE departments
( department_id INTEGER PRIMARY KEY AUTOINCREMENT,
  department_name VARCHAR
);

CREATE TABLE employees
( employee_id INTEGER PRIMARY KEY AUTOINCREMENT,
  last_name VARCHAR NOT NULL,
  first_name VARCHAR,
  department_id INTEGER,
  CONSTRAINT fk_departments
    FOREIGN KEY (department_id)
    REFERENCES departments(department_id)
);

En este ejemplo, hemos creado una clave principal en la tabla de departamentos que contiene solo un campo: el campo id_departamento. Luego creamos una clave externa en la tabla de empleados llamada fk_departments que hace referencia a la tabla de departamentos según el campo de departamento_id.

Si queremos eliminar la clave foránea llamada fk_departments, podemos ejecutar el siguiente comando:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE employees RENAME TO _employees_old;

CREATE TABLE employees
( employee_id INTEGER PRIMARY KEY AUTOINCREMENT,
  last_name VARCHAR NOT NULL,
  first_name VARCHAR,
  department_id INTEGER
);

INSERT INTO employees SELECT * FROM _employees_old;

COMMIT;

PRAGMA foreign_keys=on;

Este ejemplo cambia el nombre de nuestra tabla de empleados existente a _employees_old. Luego creará una nueva tabla de empleados sin clave externa. Luego inserta todos los datos de la tabla _employees_old en la tabla de empleados.

Esta solución le permite eliminar la clave externa de la tabla de empleados sin perder los datos de la tabla.