O documento discute características de colunas em tabelas de bancos de dados, incluindo valores padrão, restrições como NOT NULL e CHECK, e como alterar e apagar tabelas.
1. PROGRAMAÇÃO EM BANCO DE
DADOS
UNIDADE 1: REPOSITÓRIO DE DADOS
Aula 3: 06/09/2018
Prof.ª M.ª Eng.ª Elaine Cecília Gatto
1
2. Características das colunas na
criação de uma tabela
•As colunas, ou os campos que fazem parte da
tabela, ou ainda, os atributos da entidade,
podem ter características particulares no
momento de sua criação.
3. Valores por Default
•Quando uma tabela é criada, estamos
indicando que ela é composta pelas colunas que
de terminamos (um, dois, três ou mais campos)
e que qualquer uma delas pode admitir valores
NULOS
•Portanto, os valores por padrão para cada um
dos campos criados será NULL
4. Valores por Default
•EXEMPLOS:
•INSERT INTO codigopostal VALUES (1000, ‘LISBOA’);
•INSERT INTO codigopostal (codigopostal) VALUES (1000);
•INSERT INTO codigopostal (localidade) VALUES
(‘LISBOA’);
•INSERT INTO codigopostal VALUES (NULL, NULL)
•INSERT INTO codigopostal VALUES (NULL, ‘LISBOA’)
5. Valores por Default
•Se você quiser que uma coluna NÃO ADMITA
valores nulos, deverá acrescentar
imediatamente ao tipo de dados da coluna a
cláusula NOT NULL.
•EXERCÍCIO3: definir como NULL ou NOT NULL
os campos das tabelas do exercício 2
6. Valores por Default
•SOLUÇÃO
create table pessoa (
idPessoa numeric not null,
nome char(30) not null,
idade integer not null,
salario numeric(10,2) not null,
telefone char(20) not null,
codigoPostal numeric(4) not null );
7. Valores por Default
•Caso um valor não for inserido em uma coluna o valor
DEFAULT armazenado nela é NULL.
•É possível também associar um outro valor DEFAULT através
da cláusula DEFAULT.
•EXEMPLO:
•create table codigopostal (
•codigo numeric(4) not null,
•localidade char(30) default ‘lisboa’);
9. Restrições – constrains
•Restrições são regras a que os valores de uma ou mais
colunas devem obedecer.
•EXEMPLO: o campo SEXO de uma tabela PESSOA só pode
conter os valores F ou M.
•O uso das restrições é a única maneira de garantir que os
dados existentes nas colunas estão de acordo com as regras
especificadas no projeto do banco.
•Erros de programação podem fazer com que dados sejam
aceitos com conteúdos inválidos
10. Constraint Not Null
•É a restrição de uso mais comum
•Impede a inserção de valores nulos na coluna em que é
especificada
•EXEMPLO
•create table TESTE (
•idTeste integer not null,
•nomeTeste char(60) not null);
11. Constraint Check
•Permite realizar a validação dos dados
inseridos na coluna, através da especificação de
uma condição.
•São admitidos apenas os dados cujo resultado
da avaliação da condição seja verdadeiro
12. Constraint Check
•EXEMPLO2:
create table TESTE(
idTeste integer not null,
nomeTeste char(60) not null
CHECK (nomeTeste NOT LIKE ‘%Reginaldo%’),
idade integer not null
CHECK (idade BETWEEN 0 AND 150),
sexo char not null
CHECK (sexo in (‘m’, ‘f’),
anos_Servico integer not null
CHECK (anos_Servico >= 0),
CHECK (idade > anos_Servico + 18));
13. Constraint Unique
•Permite indicar que os valores dessa coluna não podem
se repetir
•Para garantir que não existem dados repetidos em uma
coluna, os SGBD criam, sobre cada uma das colunas
UNIQUE, um ÍNDICE único.
•Podem existir tantas colunas UNIQUE quantas forem
necessárias
•MYSQL não aceita o valor NULL em campos UNIQUE
16. Constraint Unique
•EXEMPLO3: garantindo que duas pessoas com o menos
nome e sobrenome não existam na tabela
create table TESTE (
idTeste integer primary key,
nome char(60),
sobrenome char(10),
telefone char(15),
Rg integer,
Unique(nome, sobrenome),
Unique(rg));
17. Constraint Primary Key
•É equivalente à cláusula NOT NULL + UNIQUE
juntas
•O conteúdo da coluna não pode ser nulo e não
pode admitir repetições
•Chave primária de uma tabela
18. Constraint Primary Key
•EXEMPLO 1: uma chave primária apenas
create table TESTE (
idTeste integer primary key,
nome char(60),
sobrenome char(10),
telefone char(15),
Rg integer,
Unique(nome, sobrenome),
Unique(rg));
19. Constraint Reference
•Permite fazer a validação das chaves
estrangeiras.
•Não se podem inserir nos campos
referenciados como chave estrangeira valores
que não existam na tabela onde os campos são
chave primária.
20. Constraint Reference
•EXEMPLO 1:
create table pessoa (
idPessoa numeric primary key,
nome char(30) not null,
idade integer not null
check (idade between 0 and 150),
salario numeric(10,2) not null
check (salario > 0 ),
telefone char(12) null
codigoPostal numeric(4)
REFERENCES codigopostal(codigo));
21. Constraint Reference
•codigopostal numeric(4)
•REFERENCES codigopostal(codigo));
•Qualquer valor inserido na coluna codigopostal da
tabela PESSOA será automaticamente validado na
coluna codigo da tabela CODIGOPOSTAL.
•Se o valor não existir na tabela CODIGOPOSTAL, o
registro não poderá ser inserido ou alterado na
tabela PESSO.
23. Constraint Reference
•codigopostal numeric(4) REFERENCES
codigopostal(codigo),
•FOREIGN KEY (id, salario) REFERENCES
pessoal(n_emp, valor)();
•Neste exemplo houve a necessidade de
referenciar uma chave estrangeira formada por
dois campos usando a CLAUSULA FOREIGN KEY
24. Constraint Reference
•codigopostal numeric(4) REFERENCES
codigopostal(codigo),
•FOREIGN KEY (id, salario) REFERENCES
pessoal(n_emp, valor)();
•Neste caso considera-se que existe outra tabela
denominada PESSOAL, sendo a sua chave
primária n_emp e valor com tipos de dados
compatíveis com ID e SALARIO
25. Constraint Reference
•As tabelas se ligam umas às outras através das
chaves estrangeiras
•A chave estrangeira de uma tabela permite ligar
esta tabela a uma outra onde esse mesmo atributo
ou conjunto de atributos é a chave primária
•QUESTÃO: o que acontece ao tentarmos apagar ou
alterar os valores de uma chave primária que tem
dados associados a outras tabelas?
26. Constraint Reference
•SOLUÇÃO: depende da forma como as tabelas
foram relacionadas
•As alterações na tabela mãe não se refletirão na
tabela filha se não houver ligação entre elas através
do uso da clausula REFERENCES
•Os valores da tabela mãe não serão alterados ou
apagados se estes existirem em qualquer tabela
filha e se houver uma ligação entre as tabelas.
27. Constraint Reference
•Em alguns casos se deseja que, ao alterar um valor em
uma tabela, sejam alteradas todas as ocorrências desse
mesmo valor nas tabelas filhas, ou então que, ao apagar
o valor na tabela mãe, sejam apagados todos os valores
existentes nas tabelas filhas
•Solução: ALTERAR OU APAGAR DADOS EM CASCATA
•Quando se apagar ou alterar algo na tabela mãe, todas
as entradas relacionadas nas tabelas filhas também são
alteradas
28. Constraint Reference
•EXEMPLO:
Create table codigopostal(
codigo numeric(4) primary key,
localidade char(30) not null );
Create table pessoa (
idPessoa numeric primary key,
nome char (30) not null,
codigopostal numeric(4)
REFERENCES codigopostal (codigo) on
UPDATE CASCATE
ON DELETE CASCADE);
29. Constraint Reference
•Vamos testar no MYSQL WORKBENCH?
•Criar o banco de dados AULA1
•Na QUERY do mysql, digitar os códigos SQL deste
slide e executar para verificar o que ocorre
•Inserir pelo menos 4 registros em cada tabela
•Teste os seguintes comandos
•SELECT * FROM pessoa
•UPDATE codigopostal SET codigo = 2222 WHERE
codigo = 1500
30. Constraint Reference
•Teste os seguintes comandos
•Select * from pessoa
•Delete from codigopostal where codigo = 2222
•Select * from pessoa
•O que acontece com os registros?
31. Constraint Reference
•EXEMPLO:DELETE CASCADE é útil quando se
pretende apagar uma fatura que contém várias
linhas de fatura em outra tabela
•CUIDADO: ao apagar o registro na tabela mãe
serão automaticamente apagados todos os
registros nas tabelas filhas
32. Tabelas Resultantes
•É possível criar tabelas a partir de outras
tabelas já existentes
•Exemplo: criar uma nova tabela denominada
EMPREGADO com os campos ID, NOME e
SALARIO existentes na tabela PESSOA. Deverão
ser carregados automaticamente os dados cujo
ID < = 35
34. Alterando Tabelas
•ALTER TABLE: comando usado para alterar a
estrutura de uma tabela já criada
•Adicionando uma coluna:
•alter table nome_da_tabela
•ADD nome_da_coluna tipo_da_coluna
36. Alterando Tabelas
•EXEMPLO 1:
•Adicionar a tabela pessoa uma coluna chamada
FAX com 15 caracteres
•R.: Alter table pessoa ADD faz char (15)
•Mostrar o conteúdo da tabela pessoa
•R.: select * from pessoa
37. Alterando Tabelas
•EXEMPLO 1:
•Alterar o tipo de dados da coluna FAX para 25
caracteres
•R.: alter table pessoa MODIFY fax char (25);
•Alterar as características da coluna SALARIO na
tabela PESSOA, de tal forma que esta possa passar
a admitir valores NULL
•R.: alter table pessoa MODIFY salario NULL;
38. Alterando Tabelas
•Observação em relação à mudança para NULL:
o comando só será executado com sucesso se
NENHUMA ocorrência da coluna tiver NULL
•Somente depois de retirados os valores NULL é
que deverá ser executado o comando alter table
39. Alterando Tabelas
•Exemplo 2: alterar as características da coluna
SALARIO na tabela CODIGOPOSTAL de tal forma
que esta não admita NULL
•R.: Alter table pessoa MODIFY salario not null;
•OBS.: lembre-se sempre de consultar o manual
do banco de dados que estiver utilizando
41. Apagando uma Tabela
•DROP TABLE Permite apagar uma tabela
•Toda a estrutura e o conjunto de valores
existentes naquela tabela serão apagados
•Se a tabela a ser apagada estiver referenciada em
views ou regras de integridade, o comando falhará
•As views e constraints associadas a tabela que será
apagada, também são eliminadas
42. Apagando uma Tabela
•EXEMPLO:
criando uma nova tabela
create table teste (coluna1 char (20));
Adicionando uma nova coluna
Alter table teste ADD coluna2 clar(20);
Inserindo um registro
INSERT INTO teste VALUES (‘Hello’, ‘Um’);
Apagando a tabela
DROP TABLE teste;