English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Restrições do PostgreSQL são usadas para especificar regras de dados na tabela.
Se houver um comportamento de dados que viola a restrição, o comportamento será interrompido pela restrição.
Restrições podem ser especificadas no momento da criação da tabela (através da declaração CREATE TABLE) ou após a criação da tabela (através da declaração ALTER TABLE).
Restrições garantem a precisão e a confiabilidade dos dados no banco de dados.
Restrições podem ser de nível de coluna ou de tabela. Restrições de nível de coluna se aplicam apenas à coluna, enquanto restrições de nível de tabela são aplicadas à tabela inteira.
Aqui estão algumas restrições comuns no PostgreSQL.
NOT NULLIndica que uma coluna não pode armazenar valores NULL.
UNIQUEGarante que os valores de uma coluna sejam únicos.
PRIMARY Key: Combinação de NOT NULL e UNIQUE. Garante que uma coluna (ou combinação de duas ou mais colunas) tenha um identificador único, o que ajuda a encontrar mais rapidamente um registro específico na tabela.
FOREIGN Key: Garante a integridade referencial dos valores entre duas tabelas. Uma tabela pode referenciar valores de outra tabela.
CHECK: Garante que os valores da coluna estejam em conformidade com as condições especificadas.
EXCLUSION: Restrição exclusiva, garante que, se qualquer duas linhas de colunas ou expressões especificadas forem comparadas usando um operador específico, pelo menos um dos operadores de comparação retornará falso ou valor vazio.
Por padrão, uma coluna pode salvar valores NULL. Se você não deseja que uma coluna tenha valores NULL, é necessário definir essa restrição na coluna, especificando que valores NULL não são permitidos na coluna.
NULL é diferente de não ter dados, ele representa dados desconhecidos.
Exemplo
A seguir, é criado um novo tabela chamado COMPANY1adicionou 5 um campo, onde três ID, NAME, AGE são configurados para não aceitar valores nulos:
CREATE TABLE COMPANY1( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
A restrição UNIQUE pode ser configurada para que a coluna seja única, evitando que valores repetidos apareçam na mesma coluna.
Exemplo
A seguir, é criado um novo tabela chamado COMPANY3adicionou 5 um campo, onde AGE é configurado como UNIQUE, portanto, você não pode adicionar dois registros com a mesma idade:
CREATE TABLE COMPANY3( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL UNIQUE, ADDRESS CHAR(50), SALARY REAL DEFAULT 50000.00 );
Ao projetar um banco de dados, PRIMARY KEY é muito importante.
A PRIMARY KEY é conhecida como chave primária, que é o identificador único de cada registro na tabela de dados.
Pode haver várias colunas configuradas como UNIQUE, mas uma tabela pode ter apenas uma coluna configurada como PRIMARY KEY.
Podemos usar a chave primária para referenciar linhas na tabela, também podemos configurar a chave primária como chave estrangeira em outra tabela para criar relações entre tabelas.
A chave primária é a combinação de restrição de não nulo e restrição de único.
Uma tabela pode ter apenas uma chave primária, que pode ser composta por um ou mais campos. Quando vários campos são usados como chave primária, eles são chamados de chave primária composta.
Se uma tabela definir um chave primária em qualquer campo, não podem haver dois registros com o mesmo valor nesses campos.
Exemplo
Vamos criar COMAPNY4 Tabela, onde o ID é a chave primária:
CREATE TABLE COMPANY4( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
A restrição de chave estrangeira especifica que os valores em uma coluna (ou um grupo de colunas) devem coincidir com os valores que aparecem em uma linha específica de outra tabela.
Normalmente, uma chave estrangeira em uma tabela aponta para uma chave única em outra tabela (restrição de chave única), mantendo a integridade de referência entre duas tabelas relacionadas.
Exemplo
A seguir, um exemplo de criação de uma tabela COMPANY6 tabela, e adicionou5um campo:
CREATE TABLE COMPANY6( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
Por exemplo, vamos criar uma tabela DEPARTMENT1 tabela, e adicionamos 3 um campo, EMP_ID é uma chave estrangeira, referenciando COMPANY6 do ID:
CREATE TABLE DEPARTMENT1( ID INT PRIMARY KEY NOT NULL, DEPT CHAR(50) NOT NULL, EMP_ID INT references COMPANY6(ID) );
A restrição de verificação garante que todos os valores na coluna satisfaçam uma condição específica, ou seja, uma verificação deve ser feita na entrada de um registro. Se o valor da condição for false, o registro viola a restrição e não pode ser inserido na tabela.
Exemplo
Por exemplo, vamos criar uma nova tabela COMPANY5Foram adicionados cinco colunas. Aqui, adicionamos CHECK para a coluna SALARY, para que o salário não possa ser zero:
CREATE TABLE COMPANY5( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL CHECK(SALARY > 0) );
A restrição de exclusão garante que se usar o operador especificado para comparar duas linhas em uma coluna ou expressão especificada, pelo menos um dos operadores de comparação retornará false ou null.
Exemplo
A seguir, um exemplo de criação de uma tabela COMPANY7 Tabela, adicionar 5 um campo e usou restrições EXCLUDE.
CREATE TABLE COMPANY7( ID INT PRIMARY KEY NOT NULL, NAME TEXT, AGE INT, ADDRESS CHAR(50), SALARY REAL, EXCLUDE USING gist (NAME WITH =, -- Se o NAME for o mesmo e o AGE for diferente, não é permitido inserir; caso contrário, é permitido inserir. AGE WITH <>) -- Se o resultado da comparação for true para toda a expressão da tabela, não é permitido inserir; caso contrário, é permitido. );
Aqui, USING gist é um tipo de índice usado para construir e executar índices.
Você precisa executar o comando CREATE EXTENSION btree_gist para cada banco de dados, o que instalará a extensão btree_gist, que define restrições EXCLUDE para tipos de dados escalares puros.
Como já forçamos que a idade seja a mesma, vamos verificar isso inserindo um registro na tabela:
INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 ); INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 ); -- Este dado tem o mesmo NAME que o primeiro e o mesmo AGE que o primeiro, portanto, cumpre os critérios de inserção INSERT INTO COMPANY7 VALUES(3, 'Allen', 42, 'California', 20000.00 ); -- Este dado é idêntico ao acima em NAME, mas diferente em AGE, portanto, não é permitido inserir
Os dois primeiros foram adicionados sem problemas COMPANY7 na tabela, mas o terceiro causará um erro:
ERRO: valor duplicado de chave viola a restrição única "company7_pkey" DETALHES: Chave (id)=(3) já existe.
Para excluir uma restrição, é necessário saber o nome da restrição; se já souber o nome, excluir a restrição é simples. Se não souber o nome, é necessário encontrar o nome gerado pelo sistema, que pode ser encontrado usando \d table_name.
A sintaxe genérica é a seguinte:
ALTER TABLE table_name DROP CONSTRAINT some_name;