SQLite: restricciones únicas

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: restricciones únicas

Este tutorial de SQLite explica cómo Crear, agregar y eliminar restricciones únicas En SQLite, con sintaxis y ejemplos.

¿Cuál es la restricción única en SQLite?

Una restricción única es un campo único o una combinación de campos que define un registro de forma única. Algunos campos pueden contener valores nulos siempre que la combinación de valores sea única.

¿Cuál es la diferencia entre una restricción única y una clave principal?

Clave primaria restricción única

Todos los campos pertenecientes a la clave principal no pueden contener valores NULL.

(Mientras que los estándares SQL-89 y SQL-92 no permiten valores NULL en claves primarias, SQLite sí permite NULL en algunos casos. Recomendamos enfáticamente no usar valores NULL en claves primarias).

Algunos campos que forman parte de una restricción única pueden contener valores NULL siempre que la combinación de valores sea única.

Crear restricciones únicas

Se pueden crear restricciones únicas al ejecutar la instrucción CREATE TABLE en SQLite.

sintaxis

La sintaxis para crear una restricción única en SQLite usando la instrucción CREATE TABLE es:

CREATE TABLE table_name
(
  column1 datatype [ NULL | NOT NULL ],
  column2 datatype [ NULL | NOT NULL ],
  ...

  CONSTRAINT constraint_name UNIQUE (uc_col1, uc_col2, ... uc_col_n)
);

table_name El nombre de la tabla que desea crear. column1, column2 Las columnas que desea crear en la tabla. constrict_name El nombre de la restricción única. uc_col1, uc_col2, … uc_col_n Las columnas que componen la restricción única.

ejemplo

Veamos un ejemplo de cómo crear una restricción única en SQLite.

CREATE TABLE employees
( employee_id INTEGER PRIMARY KEY AUTOINCREMENT,
  last_name VARCHAR NOT NULL,
  first_name VARCHAR,
  hire_date DATE,
  CONSTRAINT name_unique UNIQUE (last_name, first_name)
);

En este ejemplo, creamos una restricción única en la tabla de empleados denominada name_unique. Consta de los campos last_name y first_name.

Agregar restricción única

Si su tabla ya existe y desea agregar una restricción única más adelante, no puede usar la instrucción ALTER TABLE para agregar una restricción única. En su lugar, debe crear una nueva tabla con una restricción única y copiar los datos en esta nueva tabla.

sintaxis

La sintaxis para agregar una restricción única a una tabla en SQLite es:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE table_name RENAME TO old_table;

CREATE TABLE table_name
(
  column1 datatype [ NULL | NOT NULL ],
  column2 datatype [ NULL | NOT NULL ],
  ...
  CONSTRAINT constraint_name UNIQUE (uc_col1, uc_col2, ... uc_col_n)
);

INSERT INTO table_name SELECT * FROM old_table;

COMMIT;

PRAGMA foreign_keys=on;

table_name El nombre de la tabla a modificar. Esta es la tabla donde desea agregar una restricción única. old_table El nombre de la tabla original. Se dejará atrás después de crear una nueva tabla con la restricción única agregada. constrict_name El nombre de la restricción única. uc_col1, uc_col2, … uc_col_n Las columnas que componen la restricción única.

ejemplo

Veamos un ejemplo de cómo agregar una restricción única a una tabla existente en SQLite. Digamos que ya tenemos una tabla de productos definida de la siguiente manera:

CREATE TABLE products
( product_id INTEGER PRIMARY KEY AUTOINCREMENT,
  product_name VARCHAR NOT NULL,
  quantity INTEGER NOT NULL DEFAULT 0
);

Queremos agregar una restricción única a la tabla de productos que contiene product_name. Podemos ejecutar los siguientes comandos:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE products RENAME TO old_products;

CREATE TABLE products
( product_id INTEGER PRIMARY KEY AUTOINCREMENT,
  product_name VARCHAR NOT NULL,
  quantity INTEGER NOT NULL DEFAULT 0,
  CONSTRAINT product_name_unique UNIQUE (product_name)
);

INSERT INTO products SELECT * FROM old_products;

COMMIT;

PRAGMA foreign_keys=on;

En este ejemplo, hemos creado una restricción única denominada product_name_unique en la tabla de productos, que consta de la columna product_name. La tabla original seguirá existiendo en la base de datos denominada old_products. Una vez que haya confirmado que la tabla de productos y los datos son los esperados, puede eliminar old_productstable.

DROP TABLE old_products;

eliminar restricción única

En SQLite, no puede usar la declaración ALTER TABLE para descartar una restricción única. En su lugar, debe crear una nueva tabla con la restricción única eliminada y copiar los datos en esta nueva tabla.

sintaxis

La sintaxis para eliminar una restricción única de una tabla en SQLite es:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE table_name RENAME TO old_table;

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

INSERT INTO table_name SELECT * FROM old_table;

COMMIT;

PRAGMA foreign_keys=on;

table_name El nombre de la tabla a modificar. Esta es la tabla de la que desea eliminar la restricción única. old_table El nombre de la tabla original. Se dejará atrás después de que cree la nueva tabla y elimine la restricción única.

ejemplo

Veamos un ejemplo de cómo eliminar una restricción única de una tabla existente en SQLite. Digamos que ya tenemos una tabla de proveedores con las siguientes definiciones:

CREATE TABLE suppliers
( supplier_id INTEGER PRIMARY KEY AUTOINCREMENT,
  supplier_name VARCHAR NOT NULL,
  address VARCHAR,
  city VARCHAR,
  CONSTRAINT supplier_name_unique UNIQUE (supplier_name)
);

Queremos eliminar la restricción única de la tabla de proveedores. Podemos ejecutar los siguientes comandos:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE suppliers RENAME TO old_suppliers;

CREATE TABLE suppliers
( supplier_id INTEGER PRIMARY KEY AUTOINCREMENT,
  supplier_name VARCHAR NOT NULL,
  address VARCHAR,
  city VARCHAR
);

INSERT INTO suppliers SELECT * FROM old_suppliers;

COMMIT;

PRAGMA foreign_keys=on;

En este ejemplo, hemos eliminado la restricción única en la tabla de proveedores existente. La tabla original seguirá existiendo en la base de datos denominada old_suppliers. Una vez que haya confirmado que la tabla de proveedores y los datos son los esperados, puede eliminar la tabla old_suppliers.

DROP TABLE old_suppliers;