Oracle Unique Constraint

Resumen: en este tutorial, aprenderá cómo usar la restricción única de Oracle para garantizar que los datos contenidos en una columna, o un grupo de columnas, sean únicos entre las filas de la tabla.

  • Sintaxis de restricción única de Oracle
  • Ejemplos de restricciones únicas de Oracle

Sintaxis de restricción única de Oracle

Una restricción única es una restricción de integridad que garantiza que los datos almacenados en una columna, o un grupo de columnas, sean únicos entre las filas de una tabla.

Normalmente, aplica las restricciones únicas a las columnas cuando crea la tabla utilizando la sintaxis de restricción en línea de la siguiente manera:

CREATE TABLE table_name (
    ...
    column_name data_type UNIQUE
    ...
);

Esta restricción única especifica que los valores de column_name son únicos en toda la tabla.

También puede usar la sintaxis de restricción fuera de línea para definir una restricción única:

CREATE TABLE table_name (
    ...,
    UNIQUE(column_name)
);

Es posible asignar un nombre a una restricción única mediante la cláusula CONSTRAINT seguida del nombre de la restricción:

CREATE TABLE table_name (
    ...
    column_name data_type CONSTRAINT unique_constraint_name UNIQUE
    ...
);

o con sintaxis de restricción fuera de línea:

CREATE TABLE table_name (
    ...
    column_name data_type,
    ...,
    CONSTRAINT unique_constraint_name UNIQUE(column_name)
);

Para definir una restricción única para un grupo de columnas, use la sintaxis de restricción fuera de línea:

CREATE TABLE table_name (
    ...
    column_name1 data_type,
    column_name2 data_type,
    ...,
    CONSTRAINT unique_constraint_name UNIQUE(column_name1, column_name2)
);

Esto especifica que la combinación de valores en column_name1 y column_name2 es única en toda la tabla, aunque ninguna de estas columnas necesita ser única.

Si desea agregar una restricción única a una tabla existente, use la instrucción ALTER TABLE:

ALTER TABLE table_name
ADD CONSTRAINT unique_constraint_name UNIQUE(column_name1, column_nam2)

A veces, es posible que desee deshabilitar una restricción única temporalmente:

ALTER TABLE table_name
DISABLE CONSTRAINT unique_constraint_name;

Y luego habilítalo:

ALTER TABLE table_name
ENABLE CONSTRAINT unique_constraint_name;

O incluso eliminar una restricción única:

ALTER TABLE table_name
DROP CONSTRAINT unique_constraint_name;

Ejemplos de restricciones únicas de Oracle

Creemos una tabla llamada clientes para la demostración:

CREATE TABLE clients (
    client_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
    first_name VARCHAR2(50) NOT NULL,
    last_name VARCHAR2(50) NOT NULL,
    company_name VARCHAR2(255) NOT NULL,
    email VARCHAR2(255) NOT NULL UNIQUE,
    phone VARCHAR(25)
);

La columna de correo electrónico tiene una restricción única que garantiza que no haya correos electrónicos duplicados.

La siguiente declaración inserta una fila en la tabla de clientes:

INSERT INTO clients(first_name,last_name, email, company_name, phone)
VALUES('Christene','Snider','christene.snider@abc.com', 'ABC Inc', '408-875-6075');

Ahora, intentamos insertar una nueva fila cuyo valor de correo electrónico ya existe en la columna de correo electrónico:

INSERT INTO clients(first_name,last_name, email, company_name, phone)
VALUES('Sherly','Snider','christene.snider@abc.com', 'ABC Inc', '408-875-6076');

Oracle emitió el siguiente mensaje de error que indica que se ha violado la restricción única:
SQL Error: ORA-00001: unique constraint (OT.SYS_C0010726) violated
Si desea agregar una restricción única para las columnas nombre_compañía y teléfono, puede usar la siguiente instrucción ALTER TABLE:

ALTER TABLE clients
ADD CONSTRAINT unique_company_phone UNIQUE(company_name, phone);

Como resultado, la combinación de valores en las columnas company_name y phone es única entre las filas de la tabla de clientes.

La siguiente declaración intenta insertar un nuevo cliente con la empresa y el teléfono que ya existen:

INSERT INTO clients(first_name,last_name, email, company_name, phone)
VALUES('Sherly',    'Snider','sherly.snider@abc.com', 'ABC Inc', '408-875-6075');

Oracle emitió el siguiente mensaje de error:
SQL Error: ORA-00001: unique constraint (OT.UNIQUE_COMPANY_PHONE) violated
Sin embargo, puede agregar el cliente que está en la empresa que ya existe en la tabla de clientes pero tiene un teléfono diferente:

INSERT INTO clients(first_name,last_name, email, company_name, phone)
VALUES('Sherly','Snider','sherly.snider@abc.com', 'ABC Inc', '408-875-6076');

Para deshabilitar la restricción única UNIQUE_COMPANY_PHONE, use la siguiente declaración:

ALTER TABLE clients
DISABLE CONSTRAINT unique_company_phone;

Y para habilitarlo:

ALTER TABLE clients
ENABLE CONSTRAINT unique_company_phone;

O borrarlo de forma permanente:

ALTER TABLE clients
DROP CONSTRAINT unique_company_phone;

En este tutorial, ha aprendido a usar la restricción única de Oracle para garantizar que los datos contenidos en una columna o un grupo de columnas sean únicos entre las filas de la tabla.

1 comentario en “Oracle Unique Constraint”

  1. Pingback: Introducción a SQL - DBandTech.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *