alter table - Bruno Moreno

Propaganda
Banco de Dados I
Aula 12 - Prof. Bruno Moreno
04/10/2011
Plano de Aula
• SQL
– Definição
– Histórico
– SQL e sublinguagens
– Definição de dados (DDL)
•
•
•
•
08:20
CREATE
Restrições básicas em SQL
ALTER
DROP
Definição de SQL
• Structured Query Language
• Linguagem padrão de SGBDRs
– Simplicidade
– Facilidade de uso
• Linguagem declarativa
– Indica o que consultar e não como consultar
08:20
Histórico
• 1970: projetada pela IBM Research
– SEQUEL (Structured English QUEry Language)
– System R
– Viabilizar o modelo relacional de E. F. Codd
• 1986: tornou-se padrão de SGBDRs
– ANSI/ISO
– SQL86 ou SQL1 (1º padrão)
08:22
Histórico
• 1992: nova versão
– SQL2 ou SQL92
• 1999: versão mais utilizada
– SQL3 ou SQL99
08:23
SQL em diferentes SGBDs
• Cada SGBD pode incluir pacotes adicionais ao
núcleo de SQL
• Alem disso, SGBDs permitem a definição de
funções e procedimentos em linguagens
específicas
– Oracle: PL/SQL
– PostgreSQL: C
08:24
SQL e sublinguagens
• SQL permite definição de dados, consultas,
atualizações e controle de acesso ao BD
– DDL
– DML
– DQL
– VDL
– DCL
– Permite embutir código SQL em linguagens de
programação genérica
08:25
SQL e sublinguagens
• DDL – Data Definition Language
– Criação, alteração e remoção de objetos do BD
• Esquemas, tabelas e atributos
O que é um esquema?
08:27
SQL e sublinguagens
• DDL – Data Definition Language
– Criação, alteração e remoção de objetos do BD
• Esquemas, tabelas e atributos
Conceito que agrupa tabelas e outros objetos que
pertencem a mesma aplicação de BD
Um esquema contém as tabelas de uma
aplicação de BD
08:29
SQL e sublinguagens
• DDL – Data Definition Language
– Criação, alteração e remoção de objetos do BD
• Esquemas, tabelas e atributos
Conceito que agrupa tabelas e outros objetos que
pertencem a mesma aplicação de BD
Um esquema contém as tabelas de uma
aplicação de BD
CREATE SCHEMA EMPRESA AUTHORIZATION BRUNO;
DCL – Data Control Language
08:36
SQL e sublinguagens
• DDL – Data Definition Language
– Criação, alteração e remoção de objetos do BD
• Esquemas, tabelas e atributos
ALTER SCHEMA EMPRESA RENAME TO EMPRESA_X
ALTER SCHEMA EMPRESA OWNER TO JOAO
08:36
SQL e sublinguagens
• DDL – Data Definition Language
– Criação, alteração e remoção de objetos do BD
• Esquemas, tabelas e atributos
DROP SCHEMA EMPRESA
08:36
SQL e sublinguagens
• DDL – Data Definition Language
– Criação, alteração e remoção de objetos do BD
• Esquemas, tabelas e atributos
CREATE TABLE EMPREGADOS (
NOME
VARCHAR(100) NOT NULL,
CPF
VARCHAR(11) PRIMARY KEY,
DATANASC
DATE,
ENDERECO
VARCHAR(30),
SEXO
CHAR,
SALARIO
DECIMAL(10,2),
SUPERCPF
VARCHAR(11) REFERENCES EMPREGADOS(CPF),
DNO
INT NOT NULL REFERENCES DEPARTAMENTO(DNUM)
);
08:41
SQL e sublinguagens
• DDL – Data Definition Language
– Criação, alteração e remoção de objetos do BD
• Esquemas, tabelas e atributos
ALTER TABLE EMPREGADOS RENAME TO EMPREGADO;
ALTER TABLE EMPREGADO ADD COLUMN FUNCAO TYPE VARCHAR(50);
ALTER TABLE EMPREGADO DROP COLUMN SALARIO;
ALTER TABLE EMPREGADO ALTER COLUMN ENDERECO TYPE VARCHAR(50);
08:41
SQL e sublinguagens
• DDL – Data Definition Language
– Criação, alteração e remoção de objetos do BD
• Esquemas, tabelas e atributos
DROP TABLE EMPREGADO
08:41
SQL e sublinguagens
• DML – Data Manipulation Language
– Comandos para Inserção, remoção e alteração de
linhas da tabela
– INSERT...
– DELETE...
– UPDATE...
08:42
SQL e sublinguagens
• DQL – Data Query Language
– Comandos para seleção
– SELECT FROM...
Existe sempre a dúvida se SELECT é
ou não DML
08:42
SQL e sublinguagens
• VDL – View Data Language
– Comandos para definição de visões
CREATE VIEW EMP_FINANCEIRO AS
SELECT * FROM EMPREGADO
WHERE DNUM = 1;
ID do departamento FINANCEIRO
08:44
SQL e sublinguagens
• DCL – Data Control Language
– Comandos controle de acesso aos dados
GRANT INSERT ON EMPREGADO TO BRUNO;
GRANT ALL PRIVILEGES
ON DEPARTAMENTO TO POSTGRES;
REVOKE DELETE ON EMPREGADO FROM BRUNO;
REVOKE ALL PRIVILEGES ON DEPARTAMENTO FROM
POSTGRES;
08:46
SQL e sublinguagens
Sublinguagem Principais Comandos
08:46
DDL
CREATE TABLE
ALTER TABLE
DROP TABLE
TRUNCATE
DML
INSERT
UPDATE
DELETE
DQL
SELECT
VDL
CREATE VIEW
DCL
GRANT
REVOKE
Banco de Dados I
COMANDOS DDL
08:47
Comandos DDL
• Principal comando: CREATE
– Esquemas: SCHEMA
– Tabelas: TABLE
– Domínios: DOMAIN
– Visões: VIEW
– Procedimentos
– Funções
– Índices
– Gatilhos
08:48
CREATE TABLE
• Cria uma tabela com atributos e restrições
iniciais
• Especificação de restrições
– Dentro do comando, após declaração de cada
atributos
– Dentro do comando, depois que os atributos
forem declarados
– Depois, usando o comando ALTER TABLE
08:48
CREATE TABLE
Dentro do comando, após declaração de
cada atributos
CREATE TABLE EMPREGADOS (
NOME
VARCHAR(100)
NOT NULL,
CPF
VARCHAR(11)
PRIMARY KEY,
DATANASC
DATE,
ENDERECO
VARCHAR(30),
SEXO
CHAR,
SALARIO
DECIMAL(10,2),
SUPERCPF
VARCHAR(11) REFERENCES EMPREGADO(CPF),
DNO
INT NOT NULL REFERENCES DEPARTAMENTO(DNUM)
);
08:49
CREATE TABLE
Dentro do comando, depois que os
atributos forem declarados
CREATE TABLE EMPREGADOS (
NOME
VARCHAR(100)
NOT NULL,
CPF
VARCHAR(11)
NOT NULL,
DATANASC
DATE,
ENDERECO
VARCHAR(30),
SEXO
CHAR,
SALARIO
DECIMAL(10,2),
SUPERCPF
VARCHAR(11),
DNO
INT NOT NULL,
PRIMARY KEY(CPF),
FOREIGN KEY(SUPERCPF) REFERENCES EMPREGADO(CPF),
FOREIGN KEY(DNO) REFERENCES DEPARTAMENTO(DNUM));
08:49
CREATE TABLE
Depois usando o comando ALTER TABLE
CREATE TABLE EMPREGADO (
NOME
VARCHAR(100)
NOT NULL,
CPF
VARCHAR(11)
NOT NULL,
DATANASC
DATE,
ENDERECO
VARCHAR(30),
SEXO
CHAR,
SALARIO
DECIMAL(10,2),
SUPERCPF
VARCHAR(11),
NOME DA RESTRIÇÃO
DNO
INT NOT NULL );
ALTER TABLE EMPREGADO
ADD CONSTRAINT EMPREGADO_PK PRIMARY KEY(CPF),
ADD CONSTRAINT GERENTE_FK
FOREIGN KEY(SUPERCPF) REFERENCES EMPREGADO(CPF),
ADD CONSTRAINT DEP_FK
08:52
FOREIGN KEY(DNO) REFERENCES DEPARTAMENTO(DNUM);
CREATE TABLE
• Tipos de dados de atributos
– Numéricos
• Inteiros de vários tamanhos
• Ponto flutuante de várias precisões
• DECIMAL(i, j) OU NUMERIC(i, j)
– i – precisão
» Número total de dígitos decimais
– j – escala
» Número de dígitos depois do ponto decimal
08:52
CREATE TABLE
• Tipos de dados de atributos
– Cadeia de caracteres
• Tamanho fixo: CHAR(n) ou CHARACTER(n)
• Tamanho variável
– VARCHAR(n)
– CHAR VARYING(n)
– CHARACTER VARYING(n)
• Valores são especificados utilizando aspas simples
• Operador de concatenação: ||
– ‘ABC’ || ‘xyz’ = ABCxyz
08:53
CREATE TABLE
• Tipos de dados de atributos
– Booleano
• TRUE e FALSE
08:54
CREATE TABLE
• Tipos de dados de atributos
– Data
• DATE
– Data
– YYYY-MM-DD
• TIME
– Tempo
– HH:MM:SS
• TIMESTAMP
– Data e Tempo
– YYYY-MM-DD HH:MM:SS
• INTERVAL
– 2 dias, 3 meses, ...
• Operadores > < ≥ ≤ são permitidos
08:55
CREATE DOMAIN
• É possível especificar um tipo de um dado
diretamente
• Exemplo: especificar um tipo somente para
representar CPFs
CREATE DOMAIN TIPO_CPF AS CHAR(11);
CREATE TABLE EMPREGADO (
NOME
VARCHAR(100),
CPF
TIPO_CPF,
[...]
);
08:55
Restrições Básicas em SQL
•
•
•
•
•
Restrições de Chave
Restrições Referencial
Restrições de Domínio
Restrições NULLs
Outras restrições...
08:57
Restrições Básicas em SQL
• Restrições de Atributo
– Se NULL não for permitido
• NOT NULL
• Restrição implícita para chave primária
– Valor default
• ... DEFAULT <VALOR>
• Valor é inserido na coluna de uma relação sempre que
houver uma inserção
• Valor quando DEFAULT não é especificado é NULL
08:58
Restrições Básicas em SQL
• Restrições de Atributo
– Limitar valores de um domínio
• Cláusula CHECK
• Exemplo: número de departamentos é restrito a
números inteiros entre 1 e 20.
CREATE TABLE DEPARTAMENTO(
NOME VARCHAR(50),
DNUMERO INT NOT NULL
CHECK (DNUMERO > 0 AND DNUMERO < 20),
PRIMARY KEY(DNUMERO)
);
08:58
Restrições Básicas em SQL
• Restrições de Domínio
– Cláusula CHECK também pode ser utilizada
CREATE DOMAIN D_NUM AS INTEGER
CHECK (DNUMERO > 0 AND DNUMERO < 20)
);
CREATE TABLE DEPARTAMENTO(
NOME VARCHAR(50),
DNUMERO DNUM NOT NULL,
PRIMARY KEY(DNUMERO)
);
08:59
Restrições Básicas em SQL
• Restrições de Chave
– PRIMARY KEY
• Especifica que um ou mais atributos definem a chave
primária da relação
• Se for uma chave simples pode ser definida logo após o
atributo
• Se composta, só no final do comando CREATE TABLE ou
usando ALTER TABLE
09:00
Restrições Básicas em SQL
• Restrições de Chave
– UNIQUE
• Especifica chaves alternativas
CREATE TABLE ALUNO(
NOME VARCHAR(50),
MATRICULA VARCHAR(8) PRIMARY KEY,
CPF VARCHAR(11) UNIQUE NOT NULL
);
09:01
Restrições Básicas em SQL
• Restrição de integridade referencial
– FOREIGN KEY (chave estrangeira)
Quando uma restrição de
integridade referencial pode ser
violada?
09:01
Restrições Básicas em SQL
• Restrição de integridade referencial
– FOREIGN KEY (chave estrangeira)
– Restrição é violada quando valores de atributos
referentes à FK ou a PK for modificado
• Ação padrão do SGBD: rejeitar (RESTRICT)
Já vimos que o projetista pode definir outras ações a
serem ativadas: AÇÕES REFERENCIAIS ENGATILHADAS
SET NULL, SET DEFAULT OU CASCADE
ON DELETE OU ON UPDATE
09:02
Restrições Básicas em SQL
• Restrição de integridade referencial
– SET NULL ON DELETE
• Na exclusão, marcar nulo
– SET DEFAULT ON DELETE
• Na exclusão, definir valor padrão
– CASCADE ON DELETE
• Na exclusão, propagar
– SET NULL ON UPDATE
• Na atualização, marcar nulo
– SET DEFAULT ON UPDATE
• Na atualização, definir valor padrão
– CASCADE ON UPDATE
• Na atualização, propagar
09:07
Restrições Básicas em SQL
• Restrição de integridade referencial
CREATE TABLE EMPREGADO(
...,
DNO INT NOT NULL DEFAULT 1,
CONSTRAINT EMP_PK PRIMARY KEY (CPF),
CONSTRAINT EMP_SUPER_CPF FOREIGN KEY (SUPERCPF)
REFERENCES EMPREGADO(CPF)
ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT EMP_DEPT_FK FOREIGN KEY (DNO)
REFERENCES DEPARTAMENTO (DNUMERO)
ON DELETE SET DEFAULT ON UPDATE CASCADE
);
09:08
Restrições Básicas em SQL
• Restrição de integridade referencial
CREATE TABLE DEPARTAMENTO(
...,
GER_CPF CHAR(9) NOT NULL DEFAULT ‘284677398’,
...,
CONSTRAINT DEPT_PK PRIMARY KEY (DNUMERO),
CONSTRAINT DEPT_SK UNIQUE (NOME),
CONSTRAINT DEPT_GER_FK FOREIGN KEY (GER_CPF)
REFERENCES EMPREGADO(CPF)
ON DELETE SET DEFAULT ON UPDATE CASCADE
);
09:13
Restrições Básicas em SQL
• Restrição de integridade referencial
CREATE TABLE DEP_LOCALIZACOES(
DNUM
INT
NOT NULL,
DLOCALIZACAO VARCHAR(15)
NOT NULL,
PRIMARY KEY (DNUM, DLOCALIZACAO),
FOREIGN KEY (DNUM)
REFERENCES DEPARTAMENTO(DNUM)
ON DELETE CASCADE ON UPDATE CASCADE
);
09:13
Restrições Básicas em SQL
• A palavra chave CONSTRAINT
– Pode ser seguida pelo nome da restrição
– O nome da restrição deve ser único para o
esquema
– O nome de uma restrição é utilizado para
eliminações e atualizações necessárias
09:15
Restrições Básicas em SQL
• Restrições em todas tuplas de uma relação
– CHECK
– Ao fim de uma relação
– Exemplo: nenhuma tupla da relação
DEPARTAMENTO pode ter GERDATAINICIO <
DEP_DATA_CRIACAO
CHECK(DEP_DATA_CRIACAO < GERDATAINICIO)
09:16
Banco de Dados I
ALTERAÇÃO DE ESQUEMAS SQL
09:17
Alteração de Esquemas SQL
• DROP
– Exclusão
– Só exclui objetos de BD que sejam nomeados
• Esquemas, tabelas, domínios ou restrições
– Há duas opções: CASCADE ou RESTRICT
– Exemplo: para excluir o esquema EMPRESA e todas as
suas tabelas, domínios e outros elementos, utilize
CASCADE
DROP SCHEMA EMPRESA CASCADE;
– Se for utilizado RESTRICT o esquema só é excluído se
não tiver nenhum elemento
09:18
Alteração de Esquemas SQL
• DROP
– Se uma tabela não é mais necessária, pode ser
eliminada
• DROP TABLE
DROP TABLE EMPREGADO CASCADE;
Neste caso, o que ocorre com as tuplas de
DEPENDENTE?
09:18
Alteração de Esquemas SQL
• DROP TABLE EMPREGADO CASCADE
– Tabelas que referenciam EMPREGADO também
são excluídas
• DROP TABLE EMPREGADO RESTRICT
– Exclusão propagada é impedida
09:28
Alteração de Esquemas SQL
• Comando ALTER
– ALTER TABLE permite
• Adicionar ou eliminar uma coluna da tabela
• Alterar o domínio de uma coluna
• Adicionar ou eliminar uma restrição
09:27
Alteração de Esquemas SQL
• Comando ALTER
– ALTER TABLE permite
• Adicionar ou eliminar uma coluna da tabela
• Alterar o domínio de uma coluna
• Adicionar ou eliminar uma restrição
ALTER TABLE EMPRESA.EMPREGADO
ADD FUNCAO VARCHAR(12);
Restrição NOT NULL não é permitida!
09:27
Alteração de Esquemas SQL
• Comando ALTER
– ALTER TABLE permite
• Adicionar ou eliminar uma coluna da tabela
• Alterar o domínio de uma coluna
• Adicionar ou eliminar uma restrição
ALTER TABLE EMPRESA.EMPREGADO
DROP ENDERECO CASCADE;
09:29
Alteração de Esquemas SQL
• Comando ALTER
– ALTER TABLE permite
• Adicionar ou eliminar uma coluna da tabela
• Alterar o domínio de uma coluna
• Adicionar ou eliminar uma restrição
ALTER TABLE EMPRESA.EMPREGADO
ALTER [COLUMN] ENDERECO TYPE VARCHAR(100);
09:31
Alteração de Esquemas SQL
• Comando ALTER
– ALTER TABLE permite
• Adicionar ou eliminar uma coluna da tabela
• Alterar o domínio de uma coluna
• Adicionar ou eliminar uma restrição
ALTER TABLE EMPRESA.EMPREGADO
ALTER GERCPF DROP DEFAULT
09:31
Alteração de Esquemas SQL
• Comando ALTER
– ALTER TABLE permite
• Adicionar ou eliminar uma coluna da tabela
• Alterar o domínio de uma coluna
• Adicionar ou eliminar uma restrição
ALTER TABLE EMPRESA.EMPREGADO
ALTER GERCPF SET DEFAULT ‘372198372’
09:32
Alteração de Esquemas SQL
• Comando ALTER
– ALTER TABLE permite
• Adicionar ou eliminar uma coluna da tabela
• Alterar o domínio de uma coluna
• Adicionar ou eliminar uma restrição
ALTER TABLE EMPRESA.EMPREGADO
DROP CONSTRAINT EMP_SUPER_CPF CASCADE;
09:32
Próxima aula PRÁTICA!
Aula 13 - 07/10/2011
Entrega do modelo conceitual
até hoje!
Freqüência!
Aula 12 - Prof. Bruno Moreno
04/10/2011
Download