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