Listado completo de tutoriales
39 - Restricción unique |
Anteriormente aprendimos la restricción "primary key", otra restricción que asegura valores únicos para cada registro es "unique".
La restricción "unique" impide la duplicación de claves alternas (no primarias), es decir, especifica que dos registros no puedan tener el mismo valor en un campo. Se permiten valores nulos.
Se pueden aplicar varias restricciones de este tipo a una misma tabla, y pueden aplicarse a uno o varios campos que no sean clave primaria.
Se emplea cuando ya se estableció una clave primaria (como un número de legajo) pero se necesita asegurar que otros datos también sean únicos y no se repitan (como número de documento).
La sintaxis general es la siguiente:
alter table NOMBRETABLA add constraint NOMBRERESTRICCION unique (CAMPO);
Ejemplo:
alter table alumnos add constraint UQ_alumnos_documento unique (documento);
En el ejemplo anterior se agrega una restricción "unique" sobre el campo "documento" de la tabla "alumnos", esto asegura que no se pueda ingresar un documento si ya existe. Esta restricción permite valores nulos, asi que si se ingresa el valor "null" para el campo "documento", se acepta.
Por convención, cuando demos el nombre a las restricciones "unique" seguiremos la misma estructura:
"UQ_NOMBRETABLA_NOMBRECAMPO". Quizá parezca innecesario colocar el nombre de la tabla, pero cuando empleemos varias tablas verá que es útil identificar las restricciones por tipo, tabla y campo.Recuerde que cuando agregamos una restricción a una tabla que contiene información, Oracle controla los datos existentes para confirmar que cumplen la condición de la restricción, si no los cumple, la restricción no se aplica y aparece un mensaje de error. En el caso del ejemplo anterior, si la tabla contiene números de documento duplicados, la restricción no podrá establecerse; si podrá establecerse si tiene valores nulos.
Oracle controla la entrada de datos en inserciones y actualizaciones evitando que se ingresen valores duplicados.
Un campo que se estableció como clave primaria no puede definirse como clave única; si una tabla tiene una clave primaria, puede tener una o varias claves únicas (aplicadas a otros campos que no sean clave primaria).
Si consultamos el catálogo "user_constraints", podemos ver las restricciones "unique" (y todos los tipos de restricciones) de todas las tablas del usuario actual. El resultado es una tabla que nos informa el propietario de la restricción (OWNER), el nombre de la restricción (CONSTRAINT_NAME), el tipo (CONSTRAINT_TYPE, si es "unique" muestra una "U"), el nombre de la tabla en la cual se aplica (TABLE_NAME), y otra información que no analizaremos por el momento.
También podemos consultar el catálogo "user_cons_columns"; nos mostrará el propietario de la restricción (OWNER), el nombre de la restricción (CONSTRAINT_NAME), la tabla a la cual se aplica (TABLE_NAME), el campo (COLUMN_NAME) y la posición (POSITION).