Listado completo de tutoriales

37 - Restricción primary key


Hemos visto la restricción que se aplica a los campos con "check".

Ahora veremos las restricciones que se aplican a las tablas, que aseguran valores únicos para cada registro.

Hay 2 tipos: 1) primary key y 2) unique.

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, PostgreSQL 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 PostgreSQL, por ejemplo 'libros_pkey'

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".

Sabemos que cuando agregamos una restricción a una tabla que contiene información, PostgreSQL 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.

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

Si ejecutamos:

 select *
  from information_schema.table_constraints 
  where table_name = 'libros';
podemos ver las restricciones "primary key" (y todos los tipos de restricciones) de dicha tabla.

Un campo con una restricción "primary key" puede tener una restricción "check".

Ingresemos el siguiente lote de comandos SQL en pgAdmin:

 drop table if exists libros;
 
 create table libros(
  codigo int not null,
  titulo varchar(40),
  autor varchar(30),
  editorial varchar(15),
  primary key (codigo)
 );

 -- Veamos la restricción "primary key" que creó automáticamente PosgreSQL:
 select *
  from information_schema.table_constraints 
  where table_name = 'libros';

 -- Vamos a eliminar la tabla y la crearemos nuevamente, sin establecer la clave primaria:

 drop table libros;
 create table libros(
  codigo int not null,
  titulo varchar(40),
  autor varchar(30),
  editorial varchar(15)
 );

 -- 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);

-- Veamos la información respecto a ella:
 select *
  from information_schema.table_constraints 
  where table_name = 'libros';

La ejecución de este lote de comandos SQL genera una salida similar a:

PostgreSQL pgAdmin primary key


Retornar