38 - Restricción primary key


La restricción "primary key" asegura que los valores sean únicos para cada registro.

Anteriormente, para establecer una clave primaria para una tabla empleábamos la siguiente sintaxis al crear la tabla, por ejemplo:

 create table libros(
  codigo int not null,
  titulo varchar(30),
  autor varchar(30),
  editorial varchar(20),
  primary key(codigo)
 );

Cada vez que establecíamos la clave primaria para la tabla, Oracle creaba automáticamente una restricción "primary key" para dicha tabla. Dicha restricción, a la cual no le dábamos un nombre, recibía un nombre dado por Oracle que consta de una serie de letras y números aleatorios.

Podemos agregar una restricción "primary key" a una tabla existente con la sintaxis básica siguiente:

 alter table NOMBRETABLA
 add constraint NOMBRECONSTRAINT
 primary key (CAMPO,...);

En el siguiente ejemplo definimos una restricción "primary key" para nuestra tabla "libros" para asegurarnos que cada libro tendrá un código diferente y único:

 alter table libros
 add constraint PK_libros_codigo
 primary key(codigo);

Con esta restricción, si intentamos ingresar un registro con un valor para el campo "codigo" que ya existe o el valor "null", aparece un mensaje de error, porque no se permiten valores duplicados ni nulos. Igualmente, si actualizamos.

Por convención, cuando demos el nombre a las restricciones "primary key" seguiremos el formato "PK_NOMBRETABLA_NOMBRECAMPO".

Cuando agregamos una restricción a una tabla que contiene información, Oracle controla los datos existentes para confirmar que cumplen las exigencias de la restricción, si no los cumple, la restricción no se aplica y aparece un mensaje de error. Por ejemplo, si intentamos definir la restricción "primary key" para "libros" y hay registros con códigos repetidos o con un valor "null", la restricción no se establece.

Cuando establecíamos una clave primaria al definir la tabla, automáticamente Oracle redefinía el campo como "not null"; lo mismo sucede al agregar una restricción "primary key", los campos que se establecen como clave primaria se redefinen automáticamente "not null".

Se permite definir solamente una restricción "primary key" por tabla, que asegura la unicidad de cada registro de una tabla.

Si consultamos el catálogo "user_constraints", podemos ver las restricciones "primary key" (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 "primary key" muestra una "P"), 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).


Retornar