Buscar

#11 Conteúdo SQL Comandos DDL (CREATE, ALTER e DROP TABLE) (Conteúdo)2


Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Continue navegando


Prévia do material em texto

Curso Técnico Subsequente de Informática para Internet 
 
Disciplina: Banco de Dados 
Professor: Freitas, Charles Cesar Magno de 
Almeida, Everton Fagner Costa de 
 
Página: 1 de 12 
1. Comandos DDL: 
 
1.1. CREATE TABLE 
Utiliza-se o comando CREATE TABLE para a criação de uma nova tabela no banco de dados. Essa tabela não possui 
registros quando é criada. A inserção de registros dar-se-á através do comando INSERT. 
 
Pode-se definir restrições aos dados a serem inseridos na tabela. Essas restrições podem ser de 2 tipos: 
 
o Restrição de coluna: Utilizada quando a restrição afeta apenas aquela coluna a qual está vinculada; 
o Restrição de tabela: Utilizada quando a restrição não afeta apenas a uma coluna. Podemos utilizar a restrição de 
tabela mesmo quando ela afeta uma coluna apenas. 
 
1.1.1. SINTAXE 
CREATE TABLE nome_da_tabela ( 
 nome_campo1 <tipo_dado> [DEFAULT expressão_padrão] 
 [NULL | NOT NULL] restrição_campo, 
 ..., 
 nome_campon <tipo_dado> [DEFAULT expressão_padrão] 
 [NULL | NOT NULL] restrição_campo, 
 CONSTRAINT [nome_da_restrição1] definições_restrição1, 
 ..., 
 CONSTRAINT [nome_da_restriçãon] definições_restriçãon 
); 
 
O parâmetro nome_da_tabela especifica o nome da tabela a ser criada. 
 
O parâmetro nome_campo especifica o nome do campo a ser criado na tabela. O tipo de dado que o campo irá 
armazenar é especificado na cláusula tipo_dado. 
 
Normalmente ao se inserir (comando INSERT) um novo registro na tabela, informa-se os valores a serem 
armazenados no novo registro mas, caso o valor de um dos campos não seja informado no momento da inserção 
esse campo receberá o valor NULL (nulo). Há a alternativa de se especificar o valor padrão para um campo quando 
o valor desse não é informado no momento da inserção utilizando a cláusula DEFAULT, onde o parâmetro 
expressão_padrão especifica esse valor. 
 
A cláusula NULL | NOT NULL especifica se um campo permite (NULL) ou não (NOT NULL) valores nulos do 
campo 
 
A cláusula CONSTRAINT define a restrição a ser aplicada na tabela. O parâmetro nome_da_restrição é 
utilizado para se definir um nome para a restrição. Esse parâmetro pode ser omitido. 
 
 
 
Curso Técnico Subsequente de Informática para Internet 
 
Disciplina: Banco de Dados 
Professor: Freitas, Charles Cesar Magno de 
Almeida, Everton Fagner Costa de 
 
Página: 2 de 12 
O parâmetro definições_restrição é utilizado para se definir o tipo de restrição a ser aplicado. Ele pode ser: 
 
 PRIMARY KEY ( nome_da_coluna [, ... ] ) 
 
Atribui uma restrição de chave primária a tabela. Cada tabela pode conter apenas uma restrição de chave 
primária, porém a restrição de chave primária pode conter um ou mais campos da tabela. 
 
A restrição de chave primária impõe que o campo, ou conjunto de campos, só poderão conter valores únicos 
(valores que não podem ter duplicação) e não nulos. 
 
 UNIQUE ( nome_do_campo [, ... ] ) 
 
Define o caráter de unicidade (não aceitar valores iguais) em um ou mais campos da tabela. Para efeitos de 
restrição, os valores null não são levados em consideração por essa restrição. 
 
Nativamente os campos de chave primária (PRIMARY KEY) já possuem essa característica, não sendo 
necessária a configuração deles com essa cláusula. 
 
 CHECK ( expressão ) 
 
Esta cláusula define uma expressão que limita os valores a serem aceitos pelo campo. 
 
Essa cláusula retorna valores booleanos. As expressões avaliadas como true ou unknown são bem-sucedidas. 
Se alguma linha de uma operação de inserção ou de atualização produzir um resultado false será lançada 
uma exceção de erro, e a inserção ou atualização não irá alterar o banco de dados. 
 
 FOREIGN KEY ( nome_da_coluna [, ... ] ) 
 REFERENCES tabela_referenciada ( coluna_referenciada [, ... ] ) 
 [ ON DELETE ação ] [ ON UPDATE ação ] 
 
Esta cláusula especifica uma chave estrangeira na tabela. A chave estrangeira pode requerer um ou mais 
campos como colunas referenciadas. Caso a coluna referenciada seja omitida, FOREIGN KEY irá se 
referenciar a chave primária da tabela_referenciada. 
 
O parâmetro ação pode receber um dos seguintes valores: 
NO ACTION 
Gera um erro de violação de integridade referencial provocado por uma alteração ou 
exclusão de dados. Podendo ser postergável (1). Esse é o valor padrão. 
RESTRICT Idem a NO ACTION, exceto que não pode ser postergável. 
CASCADE 
Exclui os registros de outras tabelas dependentes do registro que está sendo excluído 
ou altera os valores dos campos associadas ao campo que está sendo alterado. 
SET NULL Atribui o valor NULL aos campos que são associados. 
SET DEFAULT Atribui o valor default aos campos que são associados. 
(1) Uma ação postergável significa que a ação só será verificada ao término da execução de todas 
as instruções de alteração ou exclusão de dados dentro de uma transação. 
 
Curso Técnico Subsequente de Informática para Internet 
 
Disciplina: Banco de Dados 
Professor: Freitas, Charles Cesar Magno de 
Almeida, Everton Fagner Costa de 
 
Página: 3 de 12 
1.1.2. TIPOS DE CAMPOS 
1.1.2.1. NUMÉRICOS 
Tipo Tamanho Faixa de Valores 
smallint 2 bytes -32768 a +32767 
integer 4 bytes -2147483648 a +2147483647 
bigint 8 bytes -9223372036854775808 a 9223372036854775807 
decimal variable Sem limite 
Numeric Variable Sem limite 
real 4 bytes 6 decimais com precisão 
double precision 8 bytes 6 decimais com precisão 
serial 4 bytes 1 a 2147483647 
bigserial 8 bytes 1 a 9223372036854775807 
 
1.1.2.2. MONETÁRIOS 
Tipo Tamanho Faixa de Valores 
Money 4 bytes -21474836.48 a +21474836.47 
 
1.1.2.3. CARACTERES (ALFANUMÉRICOS) 
Tipo Faixa de Valores 
character varying(n), varchar(n) Comprimento variável, limitado a n caracteres 
character(n), char(n) 
Tamanho fixo em n caracteres, preenchido com espaços em 
branco 
text Comprimento ilimitado 
 
1.1.2.4. BOOLEANOS 
Tipo Faixa de Valores 
boolean 
Armazena valores booleanos (TRUE ou FALSE). NULL 
também é aceito por esse tipo. 
 
1.1.2.5. DATA / HORA 
Tipo Tamanho Faixa de Valores 
timestamp [ (p) ] [ without time zone ] 8 bytes 4713 BC a 5874897 AD 
timestamp [ (p) ] with time zone 8 bytes 4713 BC a 5874897 AD 
interval [ (p) ] 12 bytes -178000000 anos a 178000000 anos 
date 4 bytes 4713 BC a 5874897 AD 
time [ (p) ] [ without time zone ] 8 bytes 00:00:00 a 24:00:00 
time [ (p) ] with time zone 12 bytes 00:00:00+1459 a 24:00:00-1459 
 
 
 
 
 
Curso Técnico Subsequente de Informática para Internet 
 
Disciplina: Banco de Dados 
Professor: Freitas, Charles Cesar Magno de 
Almeida, Everton Fagner Costa de 
 
Página: 4 de 12 
1.1.3. EXEMPLOS 
Tomando por base o cenário abaixo, analisemos o modelo E-R e em seguida vejamos a sua implementação: 
Gostaria de manter os dados pessoais dos alunos, entre eles a matrícula, o nome e o telefone de contato. 
As turmas possuem aulas diárias em apenas um turno (matutino, vespertino ou noturno), iniciando em uma determinada 
data e possuindo uma data prevista de término. 
Quero também guardar os dados dos professores (CPF e nome). Estes podem ministrar aulas em várias turmas ao 
mesmo tempo, mas em turnos distintos. 
As turmas são compostas por diversos alunos, e nada impede que esse aluno assista aula em diversas turmas em 
horários distintos. 
 
Após a análise, chegamos ao seguinte modelo E-R: 
 
 
Analisando os valores que serão armazenados nas tabelas, montamos o seguinte dicionário de dados: 
 
• Entidade: docentes (armazenar os dados dos docentes) 
 
 
• Entidade: disciplinas (armazenar os dados das disciplinas)Curso Técnico Subsequente de Informática para Internet 
 
Disciplina: Banco de Dados 
Professor: Freitas, Charles Cesar Magno de 
Almeida, Everton Fagner Costa de 
 
Página: 5 de 12 
• Entidade: cursos (armazenar os dados dos cursos) 
 
 
• Entidade: docentes_disciplinas (Armazenar as associações entre docentes, disciplinas, cursos e períodos 
letivos) 
 
 
Para iniciarmos a criação das tabelas devemos observar que tempos tabelas que possuem campos que são 
dependentes de outros campos em outras tabelas (chaves estrangeiras ou foreign keys). Portanto essas tabelas 
deverão ser criadas primeiro. 
 
CREATE TABLE docentes ( 
 matricula INTEGER NOT NULL, 
 nome VARCHAR(60) NOT NULL, 
 CONSTRAINT pk_docentes PRIMARY KEY(matricula) 
); 
 
 
 
 
Curso Técnico Subsequente de Informática para Internet 
 
Disciplina: Banco de Dados 
Professor: Freitas, Charles Cesar Magno de 
Almeida, Everton Fagner Costa de 
 
Página: 6 de 12 
CREATE TABLE disciplinas ( 
 codigo SERIAL, 
 nome VARCHAR(100) NOT NULL, 
 cargahoraria INTEGER NOT NULL, 
 CONSTRAINT pk_disciplinas PRIMARY KEY(codigo), 
 CONSTRAINT ck_cargahoraria CHECK(cargahoraria IN (30, 45, 60, 90, 120)) 
); 
 
 
 
CREATE TABLE cursos ( 
 codigo INTEGER, 
 nome VARCHAR(200) NOT NULL, 
 CONSTRAINT pk_cursos PRIMARY KEY(codigo), 
 CONSTRAINT ck_cursos_codigo CHECK(codigo <= 99999) 
); 
 
 
 
 
 
Curso Técnico Subsequente de Informática para Internet 
 
Disciplina: Banco de Dados 
Professor: Freitas, Charles Cesar Magno de 
Almeida, Everton Fagner Costa de 
 
Página: 7 de 12 
Uma vez criadas as tabelas que não dependem de outras, criamos a tabela que possui as chaves estrangeiras. 
 
CREATE TABLE docentes_disciplinas ( 
 iddocentes_disciplinas SERIAL, 
 periodo VARCHAR(6) NOT NULL, 
 matricula INTEGER NOT NULL, 
 codigo integer NOT NULL, 
 codcurso INTEGER NOT NULL, 
 CONSTRAINT pk_docentes_disciplinas PRIMARY KEY(iddocentes_disciplinas), 
 CONSTRAINT ck_codcurso CHECK(codcurso <= 99999), 
 CONSTRAINT fk_matricula FOREIGN KEY (matricula) 
 REFERENCES docentes (matricula), 
 CONSTRAINT fk_codigo FOREIGN KEY (codigo) 
 REFERENCES disciplinas (codigo), 
 CONSTRAINT fk_codcurso FOREIGN KEY (codcurso) 
 REFERENCES cursos (codigo) 
); 
 
 
 
 
 
 
Curso Técnico Subsequente de Informática para Internet 
 
Disciplina: Banco de Dados 
Professor: Freitas, Charles Cesar Magno de 
Almeida, Everton Fagner Costa de 
 
Página: 8 de 12 
Uma vez criadas as tabelas, podemos observar no Object Browser como ficou a estrutura do banco: 
 
 
 
 
 
 
Curso Técnico Subsequente de Informática para Internet 
 
Disciplina: Banco de Dados 
Professor: Freitas, Charles Cesar Magno de 
Almeida, Everton Fagner Costa de 
 
Página: 9 de 12 
1.2. ALTER TABLE 
Comando utilizado para alterar a estrutura de uma tabela. 
 
1.2.1. SINTAXE 
ALTER TABLE <nome_tabela> RENAME TO <novo_nome_tabela>; 
 
Esta sintaxe permite alterar o nome da tabela. 
 
ALTER TABLE <nome_tabela> RENAME COLUMN <nome_campo> TO <novo_nome_campo>; 
 
Altera o nome de um campo em uma tabela.. 
 
ALTER TABLE <nome_tabela> ADD COLUMN <especicacoes_novo_campo>; 
 
Adiciona um novo campo na tabela. Para maiores detalhes sobre especicacoes_novo_campo veja o tópico 
CREATE TABLE. 
 
ALTER TABLE <nome_tabela> ALTER COLUMN <nome_campo> <especicacoes_campo>; 
 
Permite alterar as especificações de um campo da tabela. Para maiores detalhes sobre especicacoes_campo 
veja o tópico CREATE TABLE. 
 
ALTER TABLE <nome_tabela> DROP COLUMN <nome_campo>; 
 
Exclui um campo da tabela. 
 
ALTER TABLE <nome_tabela> ADD CONSTRAINT <especicacoes_restrição>; 
 
Adiciona uma nova restrição na tabela. Para maiores detalhes sobre especicacoes_restrição veja o tópico 
CREATE TABLE. 
 
ALTER TABLE <nome_tabela> DROP CONSTRAINT <nome_restrição>; 
 
Exclui uma restrição da tabela. 
 
 
 
Curso Técnico Subsequente de Informática para Internet 
 
Disciplina: Banco de Dados 
Professor: Freitas, Charles Cesar Magno de 
Almeida, Everton Fagner Costa de 
 
Página: 10 de 12 
1.2.2. EXEMPLOS 
Vejamos no Object Browser a estrutura da tabela disciplinas. 
 
 
 
Vemos que temos um campo chamado nome. Se desejarmos alterar o nome desse campo para nome_discplina 
devemos executar o comando abaixo: 
 
ALTER TABLE disciplinas RENAME COLUMN nome TO nome_disciplina; 
 
 
 
Curso Técnico Subsequente de Informática para Internet 
 
Disciplina: Banco de Dados 
Professor: Freitas, Charles Cesar Magno de 
Almeida, Everton Fagner Costa de 
 
Página: 11 de 12 
O resultado será 
 
 
 
Vamos agora adicionar o o campo email na tabela docentes. Lembre-se de visualizar a estrutura antes e depois 
do comando. 
 
ALTER TABLE docentes ADD COLUMN email VARCHAR(100) NOT NULL; 
 
 
 
 
Curso Técnico Subsequente de Informática para Internet 
 
Disciplina: Banco de Dados 
Professor: Freitas, Charles Cesar Magno de 
Almeida, Everton Fagner Costa de 
 
Página: 12 de 12 
1.3. DROP TABLE 
Esse comando é utilizado para excluir a tabela do banco de dados. 
 
Quando se executa esse comando, deve-se observar os seguintes pontos: 
 
o Ao se excluir uma tabela, todo o seu conteúdo será excluído; 
o Ao se excluir uma tabela que possui um relacionamento, o comando irá dar um alerta. 
 
Cabe ressaltar que o comando DROP TABLE não pode ser desfeito, portanto deve-se tomar muito cuidado na sua 
execução. 
 
1.3.1. SINTAXE 
DROP TABLE [ IF EXISTS ] <nome_tabela>; 
 
Esta sintaxe permite remover o banco de dados. 
 
A cláusula IF EXISTS verifica a existência do banco de dados antes da execução do comando. 
 
1.3.2. EXEMPLOS 
Para remover a tabela docentes devemos executar a seguinte instrução: 
 
DROP TABLE docentes; 
 
Caso a tabela docentes não exista, o SGBD irá exibir uma mensagem de erro. 
 
Para evitar essa mensagem, utiliza-se a cláusula IF EXISTS. 
 
DROP TABLE IF EXISTS docentes; 
 
Nesse exemplo podemos ver que irá ser exibido uma mensagem de erro, pois há uma tabela que possui uma 
chave estrangeira dependente da tabela docentes. Para evitar essa mensagem podemos adotar uma das 
alternativas a seguir: 
 
▪ Excluir o relacionamento entre as tabelas; 
▪ Excluir apenas o campo chave estrangeira na tabela docentes_disciplinas ; 
▪ Excluir a tabela que possui a chave estrangeira (docentes_disciplinas). 
 
2. Referências 
• ROB, Peter; CORONEL, Carlos. SISTEMAS DE BANCO DE DADOS: PROJETO, IMPLEMENTAÇÃO E 
GERENCIAMENTO – Tradução da 8ª edição norte-americana. 8ª. ed. [S.l.]: Cengage, 2010. 744 p. 
• http://pgdocptbr.sourceforge.net/pg82/reference.html 
• http://pgdocptbr.sourceforge.net/pg82/datatype.html