Você está na página 1de 55

Linguagem de Definição de Dados – DDL

Linguagem de Controlo de Transacções - TCL


Agenda

1. Comandos DDL

2.Reforço das regras de Integridade

3.Comandos TCL
1. Linguagem de Definição
de Dados (DDL)
É uma linguagem que permite ao DBA ou user
descrever e nomear entidades, atributos e
relacionamentos necessários para a aplicação, junto
com as respectivas restrições de segurança e
1.1. integridade.
Conceito
O Schema da BD é gerado através de um conjunto de
definições expressas por meio de uma linguagem de
definição de dados. Esta não pode ser usada para
manipular dados.
1. Linguagem de Definição
de Dados (DDL)
O resultado da compilação dos comandos DDL é um
conjunto de tabelas armazenadas em ficheiros
especiais denominados catálogo do sistema. O
catálogo do sistema faz parte dos metadados, que
1.1. são dados que descrevem os objectos da BD e torna-
Conceito os fáceis de serem acedidos ou manipulados.

Antes de o SGBD aceder os dados na Base de dados,


ele consulta primeiro o catálogo do sistema. Os
termos dicionário e directório de dados e são
também usados para descrever o catálogo do
sistema.
1.2. Principais Comandos (DDL)
O DDL permite a criação e destruição dos seguintes
objectos da base de dados: Schema, domínios,
tabelas, Views e índices.
Criação Alteração Destruição
1. CREATE SCHEMA DROP SCHEMA

DDL CREATE DOMAIN


CREATE TABLE
ALTER DOMAIN
ALTER TABLE
DROP DOMAIN
DROP TABLE
CREATE VIEW DROP VIEW
CREATE INDEX DROP INDEX
1.2. Principais Comandos (DDL)

Depois de criar a base de dados, podemos criar as as


estruturas de tabela. Esta tarefa é conseguida através
do comando CREATE TABLE, o qual tem a seguinte
1.2.1. sintaxe:
Create Table
1.2. Principais Comandos (DDL)
CREATE TABLE NomeTabela
({NomeColuna TipoDado [NOT NULL] [UNIQUE]
[DEFAULT OpcaoDefault] [CHECK
(CondicaoPesquisa)] [, . . .]}
1.2.1. [PRIMARY KEY (listaColunas),]
{[UNIQUE (listaColunas)] [, . . .]}
Create Table {[FOREIGN KEY (listaColunasChavesEstrangeira)
REFERENCES NomeTabelaPai
[(listaColunasChavesCandidata)]
[MATCH {PARTIAL | FULL}
[ON UPDATE referentialAction]
[ON DELETE referentialAction]] [, . . .]}
)
1.2. Principais Comandos (DDL)

1.2.1.
Create Table
1.2. Principais Comandos (DDL)
Exemplo 1: Criação da tabela “alunos” sem qualquer
tipo de restrição da coluna ou de tabela nem é
definida nenhuma chave primária.
1.2.1.
Create Table CREATE TABLE alunos
(numero NUMBER(10),
nome VARCHAR2(40)
);
1.2.1. Create Table
A sintaxe para se definir uma coluna como chave
primária é uma das seguintes:

 Restrição de coluna:
1.2.1.1. [CONSTRAINT nome_restrição] PRIMARY KEY
Primary Key  Restrição de tabela:
[CONSTRAINT nome_restrição] PRIMARY KEY
(coluna)

Restrição de tabela (chave composta):


[CONSTRAINT nome_restrição] PRIMARY KEY
(coluna1, coluna2)
1.2.1. Create Table
Exemplo2: Definir uma chave primária nas restrições
de coluna.

CREATE TABLE alunos


1.2.1.1. (numero NUMBER(10) PRIMARY KEY,
Primary Key nome VARCHAR2(40)
);
1.2.1. Create Table
Exemplo3: Definir uma chave primária nas restrições
de coluna e dar um nome à restrição.

CREATE TABLE alunos


1.2.1.1. (numero NUMBER(10) CONSTRAINT
Primary Key pk_numero_alunos PRIMARY KEY,
nome VARCHAR2(40)
);
1.2.1. Create Table
Exemplo4: Definir uma chave primária nas restrições
de tabela e dar um nome à restrição.

1.2.1.1. CREATE TABLE alunos


Primary Key (numero NUMBER(10),
nome VARCHAR2(40),
CONSTRAINT pk_numero_alunos PRIMARY
KEY(numero)
);
1.2.1. Create Table
Exemplo5: Definir uma chave primária composta nas
restrições de tabela e dar
um nome à restrição.

1.2.1.1. CREATE TABLE alunos


Primary Key (ano_entr NUMBER(6),
num_entr NUMBER(4),
nome VARCHAR2(40),
CONSTRAINT pk_ano_num_alunos PRIMARY
KEY(ano_entr, num_entr));

Para chaves primárias compostas, o único local possível para a definição


da restrição é na secção de restrições da tabela.
1.2.1. Create Table
Uma coluna que obedeça à restrição de Unicidade não
pode ter valores repetidos. Note no entanto que uma
coluna nestas condições PODE conter valores nulos.
A sintaxe para se definir uma coluna com restrição de
1.2.1.2. Unicidade é uma das seguintes:
Unique  Se definir a restrição nas restrições de coluna:
[CONSTRAINT nome_restrição] UNIQUE

 Se definir a restrição nas restrições de tabela:


[CONSTRAINT nome_restrição] UNIQUE
(coluna1, coluna2, ...)
1.2.1. Create Table
Exemplo1: Definir uma coluna, bi, com restrição de
Unicidade e dar um nome à restrição.

CREATE TABLE alunos


1.2.1.3. (numero NUMBER(10) PRIMARY KEY,
nome VARCHAR2(40) ,
Unique bi NUMBER(10) CONSTRAINT uni_bi_alunos UNIQUE
); ou
CREATE TABLE alunos
(numero NUMBER(10) PRIMARY KEY,
nome VARCHAR2(40) ,
bi NUMBER(10) ,
CONSTRAINT uni_bi_alunos UNIQUE(bi));
1.2.1. Create Table
O comando Check serve para obrigar a que na inserção
de dados sejam verificadas condições.

As condições a verificar apenas permitem a inserção de


1.2.1.3. dados se o valor devolvido for Verdade ou
Desconhecido no caso de existir comparações com
Check valores nulos.

As condições a verificar podem incluir expressões


aritméticas e chamadas de funções SQL.
1.2.1. Create Table
A sintaxe para se definir uma coluna com restrição de
integridade geral é:
[CONSTRAINT nome_restrição] CHECK (condicao)

1.2.1.3. Exemplo1: O campo ano, caso tenha valor, terá que ser
obrigatoriamente acima de 1980.
Check
CREATE TABLE alunos
(numero NUMBER(10) PRIMARY KEY,
nome VARCHAR2(40) ,
ano NUMBER(4) CONSTRAINT ck_ano_alunos
CHECK(ano>1980)
);
1.2.1. Create Table
Exemplo2: O campo ano, caso tenha valor, terá que ser
obrigatoriamente acima de 1980. Restrição de tabela.

1.2.1.3. CREATE TABLE alunos


(numero NUMBER(10) PRIMARY KEY,
Check nome VARCHAR2(40) ,
ano NUMBER(4) ,
CONSTRAINT ck_ano_alunos CHECK(ano>1980)
);
1.2.1. Create Table
Exemplo2: O campo ano, caso tenha valor, terá que ser
obrigatoriamente acima de 1980. Restrição de tabela.

1.2.1.3. CREATE TABLE alunos


(numero NUMBER(10) PRIMARY KEY,
Check nome VARCHAR2(40) ,
ano NUMBER(4) ,
CONSTRAINT ck_ano_alunos CHECK(ano>1980)
);
1.2.1. Create Table
Exemplo3:

Criar a tabela empregados com duas restrições (para


além da de chave primária). A primeira restrição,
1.2.1.3. ck_nome_empregados, obriga a que os nomes tenham
Check um espaço no meio, ou seja, que exista pelo menos um
nome e um apelido para cada empregado. A outra
restrição, ck_funcao_empregado, obriga a que a
função do empregado seja uma de entre ‘Presidente’,
‘Analista’ e ‘Vendedor’.
1.2.1. Create Table
Solução:

CREATE TABLE empregados


(numero NUMBER(10) PRIMARY KEY,
1.2.1.3. nome VARCHAR2(40) ,
funcao VARCHAR2(20) ,
Check CONSTRAINT ck_nome_empregados CHECK (nome LIKE
'% %'),
CONSTRAINT ck_funcao_empregados CHECK (funcao IN
('Presidente', 'Analista', 'Vendedor'))
);
1.2.1. Create Table
Uma coluna sem valores nulos é uma em que é sempre
obrigatória a entrada de um valor. Os valores podem
ser repetidos. Sintaxe:

1.2.1.4.  Restrição de coluna


[CONSTRAINT nome_restrição] NOT NULL
Not Null
 Restrição de tabela
[CONSTRAINT nome_restrição] CHECK (coluna IS NOT
NULL)
1.2.1. Create Table
Exemplo1: Definir uma coluna, nome, sem valores
nulos e dar um nome à restrição.

CREATE TABLE alunos


1.2.1.4. (numero NUMBER(10) PRIMARY KEY,
nome VARCHAR2(40) CONSTRAINT nn_nome_alunos
Not Null NOT NULL
);
1.2.1. Create Table
Exemplo2: Definir uma coluna, nome, sem valores
nulos e dar um nome à restrição. Restrição de tabela.

1.2.1.4. CREATE TABLE alunos


(numero NUMBER(10) PRIMARY KEY,
Not Null nome VARCHAR2(40) ,
CONSTRAINT nn_nome_alunos CHECK (nome IS NOT
NULL)
);
1.2.1. Create Table
Uma chave estrangeira (FOREIGN KEY) é uma referência
a um valor que existe noutra coluna da mesma tabela
ou de outra tabela. A coluna referenciada tem que ser
uma chave primária ou uma coluna UNIQUE.
1.2.1.5. Deve haver concordancia entre o tipo de dado e
Foreign Key… número de colunas. Sintaxe:

References [CONSTRAINT nome_restrição] REFERENCES


tabela[(coluna)]
[ON DELETE CASCADE]
1.2.1. Create Table
Alternativamente pode definir-se uma chave
estrangeira da seguinte forma (Restrição de tabela):

[CONSTRAINT nome_restrição] FOREIGN KEY(col1,


1.2.1.5 col2, ...) REFERENCES tabela(colA, colB, ...)
Foreign Key… [ON DELETE CASCADE]

References
1.2.1. Create Table
Exemplo1: Um aluno é padrinho do outro.
CREATE TABLE alunos
(numero NUMBER(10) PRIMARY KEY,
nome VARCHAR2(40) NOT NULL,
1.2.1.5. bi NUMBER(10) UNIQUE,
morada VARCHAR2(80) ,
Foreign Key… padrinho NUMBER(10) CONSTRAINT
References fk_padrinho_alunos
REFERENCES alunos(numero),
ndep NUMBER(3) CONSTRAINT fk_ndep_alunos
REFERENCES departamentos(ndep)
ON DELETE CASCADE
);
1.2.1. Create Table
Exemplo2: Chave primária composta.

CREATE TABLE alunos


(num NUMBER(10) PRIMARY KEY,
1.2.1.5. nome VARCHAR2(30) NOT NULL
);
Foreign Key…
References
CREATE TABLE disciplinas
( disc NUMBER(4) PRIMARY KEY,
nome VARCHAR2(30) NOT NULL);
1.2.1. Create Table
Exemplo2:

CREATE TABLE exame_freq


(ano_lec NUMBER(4) ,
1.2.1.5. epoca VARCHAR2(20) ,
disc NUMBER(4) REFERENCES disciplinas,
Foreign Key… data DATE , PRIMARY KEY (ano_lec, epoca, disc)
References );
1.2.1. Create Table
Exemplo2: Chave estrangeira composta.

CREATE TABLE notas


(ano_lec NUMBER(4) ,
1.2.1.5. epoca VARCHAR2(20) ,
disc NUMBER(4) REFERENCES disciplinas,
Foreign Key… num_alu NUMBER(10) REFERENCES alunos(num) ON
References DELETE CASCADE,
CONSTRAINT fk_notas FOREIGN KEY(ano_lec, epoca,
disc)
REFERENCES exame_freq(ano_lec, epoca, disc)
);
1.2.1. Create Table
Quando se inserem registos numa tabela é possível
não especificar todos os valores de todos os campos.
Os campos em falta serão inseridos com um valor por
Padrão, se este estiver definido, ou com NULL.
1.2.1.6. Sintaxe:
Default CREATE TABLE tabela
(coluna1 tipo_coluna1 DEFAULT valor1
[restrições_coluna1],
coluna2 tipo_coluna2 DEFAULT valor2
[restrições_coluna2], ...
);
1.2.1. Create Table
Exemplo1:

CREATE TABLE empregados


(numero NUMBER(10) PRIMARY KEY,
1.2.1.6. nome VARCHAR2(40) NOT NULL,
data_entrada DATE DEFAULT SYSDATE,
Default funcao VARCHAR2(20) DEFAULT ‘Programador’,
sal NUMBER(6) DEFAULT NULL,
premios NUMBER(6) ,
data_pagamento DATE DEFAULT
NEXT_DAY(ROUND(SYSDATE+14, ‘MONTH’), ‘TUE’)
);
1.2.1. Create Table
O comando de CREATE TABLE permite uso de
subconsultas. A subconsulta a usar faz duas coisas:
copia os dados de outras tabelas para a tabela a criar e
determina os nomes e os tipos de dados das colunas
1.2.1.7. da nova tabela. Sintaxe:
SubConsulta
CREATE TABLE tabela AS
Subconsulta;

A subconsulta pode por sua vez conter outras


subconsultas.
1.2.1. Create Table
Exemplo1: Copiar os dados e a estrutura de colunas da
tabela emp.

CREATE TABLE emp2 AS


1.2.1.7. SELECT * FROM emp;
SubConsulta
Nota: Não terá qualquer tipo de restrição de
integridade sobre as suas colunas. E agora, o que
vamos fazer, se as restrições são necessárias?
1.2.2. Alter Table
Depois de criar uma tabela é possível alterá-la. É
particularmente importante se a tabela já contiver
dados que não se podem perder.

1.2.2.1.
As alterações possíveis são:
Conceito  Acrescentar colunas,
 Redefinir colunas no que diz respeito ao tipo de
dados, comprimento e valor por Padrão,
 Acrescentar e retirar restrições,
 Activar e desactivar restrições
1.2.2. Alter Table
Repare que não é possível remover uma coluna. Note
ainda que só é possível diminuir o tamanho dos dados
de uma coluna se a tabela estiver vazia.

1.2.2.1.
Conceito
1.2.2. Alter Table
Para acrescentar uma coluna a uma tabela já existente
usa-se a seguinte sintaxe:

ALTER TABLE tabela


1.2.2.2. ADD (coluna tipo_coluna [restricoes] [valor_Padrão]);
Acrescentar Exemplo:
Coluna ALTER TABLE empregados
ADD (sexo CHAR(1) DEFAULT 'F'
CONSTRAINT ck_sexo_empregados CHECK (sexo IN
('M', 'F'))
);
1.2.2. Alter Table
Para alterar colunas (tipo, comprimento dos dados,
valores por Padrão) usa-se o comando:

ALTER TABLE tabela


1.2.2.3. MODIFY (coluna [tipo_coluna] [valor_Padrão]);
Alterar Coluna Nota: Só serve para uma coluna

Note que não é possível com a cláusula MODIFY coluna


alterar ou remover restrições sobre essas colunas. Para
isso é preciso a cláusula DROP restrição.
1.2.2. Alter Table
Exemplo1: Alterar o tipo de dados

ALTER TABLE empregados


MODIFY (sexo CHAR(3));
1.2.2.3.
Alterar Coluna Exemplo2: Alterar o valor por Padrão

ALTER TABLE empregados


MODIFY (sexo DEFAULT ‘M’);
1.2.2. Alter Table
Para remover uma restrição usa-se:
ALTER TABLE tabela
DROP CONSTRAINT restrição;

1.2.2.4.
Exemplo1:Remover a restrição da coluna sexo
Remover
Restrição ALTER TABLE empregados
DROP CONSTRAINT ck_sexo_empregados;
1.2.2. Alter Table
Para acrescentar uma restrição usa-se:

ALTER TABLE tabela


ADD CONSTRAINT nome_restricao condicao
1.2.2.5. [DISABLE];
Acrescentar Se se usar a palavra DISABLE, a restrição é
Restrição acrescentada mas não é activada. Ou seja, existe mas
ainda não está a funcionar.
1.2.2. Alter Table
Exemplo1: Acrescentar uma restrição à coluna sexo.

ALTER TABLE empregados


ADD CONSTRAINT ck_sexo_empregados CHECK (sexo
1.2.2.5. IN (‘Fem’, ‘Mas’));
Acrescentar Repare que a menos que a tabela esteja vazia este
Restrição comando resulta em um erro isto porque os registos já
inseridos na tabela têm o campo sexo com o valor
‘F’ ou ‘M’.
1.2.2. Alter Table
A sintaxe para desactivar restrições é:

ALTER TABLE tabela


DISABLE CONSTRAINT nome_condição;
1.2.2.6.
Exemplo1: Desactiva a restrição ck_sexo_empregados
Desativar
Restrição ALTER TABLE empregados
DISABLE CONSTRAINT ck_sexo_empregados;
1.2.2. Alter Table
Da mesma forma que é possível desactivar restrições
também é possível activá-las.
A sintaxe para activar restrições é:

1.2.2.7. ALTER TABLE tabela


Ativar ENABLE CONSTRAINT nome_condição;

Restrição Exemplo1: Activa a restrição ck_sexo_empregados

ALTER TABLE empregados


ENABLE CONSTRAINT ck_sexo_empregados;
1.2.3. DROP Table
Para apagar tabelas usa-se o comando DROP TABLE
seguido do nome da tabela.

Exemplo1: Apague a tabela emp:


1.2.3.1
Exemplo: DROP TABLE emp;
1.2.4. Create View
A sintaxe mais simplificada do comando Create View é:

CREATE VIEW NomeView [(NovoNomeColuna[, . . . ])]


AS subselect
1.2.4.1
Exemplo1:
Exemplo:
Create View EmployeesView
As select First_Name, Last_Name
From Employees
Where Department_id = 50;

Para apagar basta: DROP VIEW NomeView;


3. TCL
A linguagem de controlo de transações é usada para
gerir transações na base de dados. Esta é usada para
gerir alterações feitas nos dados da tabele atraves dos
comandos DML. Eis os comandos de controlo de
3.1 transações:
Conceito:  Commit;
 Rollback e
 SavePoint.
3. TCL
O comando Commit é usado para guardar
permanentimente qualquer transação na BD.

Quando são usados comandos DML como INSERT,


3.2 UPDATE ou DELETE, as suas alterações não são
Commit: permanetes, ou seja, podem sofrer o rollback.

Para evitar esta situação, usa-se o comando COMMIT


para marcar as alterações como permanentes.
Sintaxe:

COMMIT;
3. TCL
O Commando Rollback restaura a BD até ao estado do
último commit feito. Este pode também ser usado com
o comando SAVEPOINT numa transação em curso.
Sintaxe:
3.3
Rollback: ROLLBACK;

Ou ainda,
ROLLBACK TO nome_savepoint;

Dependendo do caso.
3. TCL
O comando SAVEPOINT é usado para temporiamente
gravar a transação de forma que se possa fazer o
ROLLBACK até este estágio quando necessário.
Sintaxe:
3.3
SavePoint: SAVEPOINT nome_savepoint;

Vejamos então um exemplo do uso dos comandos


ROLLBACK e SAVEPOINT:
3. TCL
Considere a tabela SERIES abaixo:

3.4
Exemplo: Vamos então efectuar algumas queries na mesma
tabela e verificar os resultados:
3. TCL
INSERT INTO series VALUES (2, 'BlindSpot');
SAVEPOINT A;

INSERT INTO series VALUES (3, ‘Prison Break');


3.4 SAVEPOINT B;
Exemplo: INSERT INTO series VALUES (4, 'Vikings');
SAVEPOINT C;

SELECT * FROM series;


3. TCL

3.4
Exemplo: Rollback to B;
Rollback to A; Select * from series;
Select * from series;
FIM

Você também pode gostar