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
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.
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
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’)
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
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 );
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’);
Valores por Default
•Cláusula DEFAULT pode ser associada a três
tipos de valores
•Literais
•NULL
•Valores de sistema
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
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);
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
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));
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
Constraint Unique
•EXEMPLO1:
create table TESTE (
idTeste integer primary key,
nome char(60) unique,
telefone char(15),
rg integer unique));
Constraint Unique
•EXEMPLO2:
create table TESTE (
idTeste integer primary key,
nome char(60),
telefone char(15),
rg integer,
Unique(nome),
Unique(rg));
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));
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
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));
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.
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));
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.
Constraint Reference
•EXEMPLO 2:
create table pessoa (
id numeric primary key,
nome char(30) not null,
telefone char(20) null
codigopostal numeric(4) REFERENCES
codigopostal(codigo),
FOREIGN KEY (id, salario) REFERENCES
pessoal(n_emp, valor)();
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
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
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?
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.
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
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);
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
Constraint Reference
•Teste os seguintes comandos
•Select * from pessoa
•Delete from codigopostal where codigo = 2222
•Select * from pessoa
•O que acontece com os registros?
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
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
Tabelas Resultantes
•SOLUÇÃO:
Create table EMPREGADO as
SELECT id, nome, salario
FROM pessoa
WHERE id <= 35
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
Alterando Tabelas
•Modificando uma coluna:
•alter table nome_da_tabela
•MODIFY nome_da_coluna tipo_da_coluna
•Apagando uma coluna:
•alter table nome_da_tabela
•DROP nome_da_coluna tipo_da_coluna
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
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;
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
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
Alterando Tabelas
•Apagando a coluna FAX:
•Alter table pessoa DROP COLUMN fax
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
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;

Programação em Banco de Dados - Aula 06/09/2018

  • 1.
    PROGRAMAÇÃO EM BANCODE DADOS UNIDADE 1: REPOSITÓRIO DE DADOS Aula 3: 06/09/2018 Prof.ª M.ª Eng.ª Elaine Cecília Gatto 1
  • 2.
    Características das colunasna 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 •Quandouma 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: •INSERTINTO 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 •Sevocê 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 createtable 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 •Casoum 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’);
  • 8.
    Valores por Default •CláusulaDEFAULT pode ser associada a três tipos de valores •Literais •NULL •Valores de sistema
  • 9.
    Restrições – constrains •Restriçõessã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 realizara 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 tableTESTE( 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 indicarque 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
  • 14.
    Constraint Unique •EXEMPLO1: create tableTESTE ( idTeste integer primary key, nome char(60) unique, telefone char(15), rg integer unique));
  • 15.
    Constraint Unique •EXEMPLO2: create tableTESTE ( idTeste integer primary key, nome char(60), telefone char(15), rg integer, Unique(nome), Unique(rg));
  • 16.
    Constraint Unique •EXEMPLO3: garantindoque 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 •EXEMPLO1: 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 fazera 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: createtable 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) •REFERENCEScodigopostal(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.
  • 22.
    Constraint Reference •EXEMPLO 2: createtable pessoa ( id numeric primary key, nome char(30) not null, telefone char(20) null codigopostal numeric(4) REFERENCES codigopostal(codigo), FOREIGN KEY (id, salario) REFERENCES pessoal(n_emp, valor)();
  • 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 tabelasse 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: dependeda 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 algunscasos 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 tablecodigopostal( 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 testarno 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 osseguintes 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ívelcriar 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
  • 33.
    Tabelas Resultantes •SOLUÇÃO: Create tableEMPREGADO as SELECT id, nome, salario FROM pessoa WHERE 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
  • 35.
    Alterando Tabelas •Modificando umacoluna: •alter table nome_da_tabela •MODIFY nome_da_coluna tipo_da_coluna •Apagando uma coluna: •alter table nome_da_tabela •DROP nome_da_coluna tipo_da_coluna
  • 36.
    Alterando Tabelas •EXEMPLO 1: •Adicionara 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: •Alteraro 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 emrelaçã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
  • 40.
    Alterando Tabelas •Apagando acoluna FAX: •Alter table pessoa DROP COLUMN fax
  • 41.
    Apagando uma Tabela •DROPTABLE 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: criandouma 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;