nt-family: Arial"> 

capa34

 

Clique aqui para ler todos os artigos desta edição

 

Tutorial SQL: Constraints

 

Constraints (restrições) mantém os dados do usuário restritos, e assim evitam que dados inválidos sejam inseridos no banco. A mera definição do tipo de dado para uma coluna é por si só um constraint. Por exemplo, uma coluna de tipo DATE restringe o conteúdo da mesma para datas válidas.

Este artigo aborda uma variedade de constraints. Para isso, utilizaremos como SGBD para exemplificar a definição e uso de constraints o PostgreSQL (para saber mais sobre este SGBD, visite o site oficial do projeto em http://www.postgresql.org e o site oficial do projeto no Brasil em http://www.postgresql.org.br).

 

NOT NULL

 

A constraint NOT NULL impede que valores nulos sejam inseridos em uma coluna. A Listagem 1 mostra a criação de uma tabela com uma constraint NOT NULL.

A inserção de um valor NULL, ou um INSERT que fosse colocar NULL em col2, causaria uma falha do INSERT.

Como mostrado na Listagem 1, o UPDATE de um valor NULL também falha.

Na Listagem 2, adiciona-se um valor DEFAULT para col2. Esta adição permite que os INSERTs não especifiquem um valor para col2, pois caso não seja especificado um valor para col2, será considerado o valor DEFAULT na inserção.

 

UNIQUE

 

A constraint UNIQUE impede que valores duplicados sejam inseridos na coluna. É implementada criando-se um índice unívoco em uma coluna. Como mostrado na Listagem 3, o UNIQUE impede valores duplicados na coluna.

O CREATE TABLE exibe um nome de um índice unívoco criado. A Listagem 3 também mostra que valores nulos múltiplos podem ser inseridos em uma coluna UNIQUE.

 

Listagem 1. Criação de tabela com constraint NOT NULL em coluna.

test=> CREATE TABLE not_null_test (

test(> col1 INTEGER,

test(> col2 INTEGER NOT NULL

test(>                                                    );

CREATE

test=> INSERT INTO not_null_test

test-> VALUES (1, NULL);

              ERROR: ExecAppend: Fail to add null value in not

              null attribute col2

test=> INSERT INTO not_null_test (col1)

test-> VALUES (1);

              ERROR: ExecAppend: Fail to add null value in not

              null attribute col2

test=> INSERT INTO not_null_test VALUES (1, 1);

              INSERT 174368 1

test=> UPDATE not_null_test SET col2 = NULL;

              ERROR: ExecReplace: Fail to add null value in not

              null attribute col2

 

Se uma constraint UNIQUE consistir de mais de uma coluna, o UNIQUE não pode ser usado como uma constraint de coluna. Em seu lugar, devemos usar uma linha UNIQUE separada na criação da tabela, para especificar uma nova coluna que fará a restrição. Esta abordagem cria um table constraint UNIQUE. A Listagem 4 mostra um constraint UNIQUE multicoluna.

Apesar de col1 ou col2 poderem não ser unívocas, um constraint requer que uma combinação de col1 e col2 seja unívoca. Por exemplo, em uma tabela que contém números de carteira de motorista de pessoas de vários estados, duas pessoas em estados diferentes poderão ter o mesmo número, porém uma combinação do estado e do número de carteira de motorista deverão sempre ser unívocos.

 

 

Listagem 2. Criação de tabela com constraint NOT NULL em coluna, adicionando-se valor DEFAULT.

test=> CREATE TABLE not_null_with_default_test (

test(>          col1 INTEGER,

test(>          col2 INTEGER NOT NULL DEFAULT 5

test(>                                                                          );

CREATE

test=> INSERT INTO not_null_with_default_test (col1)

test-> VALUES (1);

...

Quer ler esse conteúdo completo? Tenha acesso completo