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.
Pingback: Introducción a SQL - DBandTech.com