Sei sulla pagina 1di 10

SQL Esquema utilizado em exemplos

 Estrutura básica
 Operações com conjuntos
 Funções de agregação
 Valores nulos
 Junções
 Subconsultas aninhadas
 Relações derivadas
 Visões
 Modificação da Base de Dados

1 2

Estrutura Bá
Básica A clá
cláusula select
 A cláusula select corresponde à operação de projeção da álgebra
relacional. É utilizada para listar os atributos pretendidos no resultado
 SQL é baseada em operações de conjuntos e de álgebra da consulta.
relacional com algumas modificações e extensões
 Listar os nomes de todas as agências na relação loan
 Uma consulta SQL básica tem a forma: select branch_name
select A1, A2, ..., An from loan
from r1, r2, ..., rm  Na sintaxe de álgebra relacional a consulta seria:
where P ∏branch-name(loan)
 Ais representam atributos
 Um asterisco na cláusula select denota “todos os atributos”
 ris representam relações
select *
 P é um predicado. from loan
 A consulta é (quase) equivalente à expressão de álgebra  NOTA: O SQL não permite o carácter ‘-’ nos nomes, portanto deverá
relacional: utilizar, por exemplo, branch_name em vez de branch-name num
sistema existente.
∏A1, A2, ..., An(σP (r1 x r2 x ... x rm))  NOTA: As maiúsculas e minúsculas não são distinguidas em nomes da
linguagem SQL.
 O resultado de uma consulta SQL é uma relação.
 Poderá utilizar maiúsculas nos lugares onde utilizamos negrito.
3 4

A clá
cláusula select (cont.) A clá
cláusula select (cont.)
 O SQL permite valores duplicados (linhas com mesmos valores)  A cláusula select pode conter expressões aritméticas
nas relações e nos resultados de consultas. envolvendo as operações, +, –, ∗, e /, com argumentos
 Para forçar a eliminação de valores duplicados, inserir a palavra- constantes ou atributos de tuplas (como na projeção
chave distinct após select. generalizada). Dependendo das implementações, encontram-se
Apresentar os nomes de todas as agências onde foram normalmente definidas uma biblioteca de funções.
efetuados empréstimos, sem repetições
select distinct branch_name  A consulta:
from loan select loan_number, branch_name, amount ∗ 100
 A palavra-chave all indica que os valores duplicados não devem from loan
ser removidos. devolve uma relação idêntica à relação loan, exceto que o
select all branch_name atributo amount é multiplicado por 100 (como na projeção
from loan generalizada).

5 6
A clá
cláusula where A clá
cláusula where (cont.)
 A cláusula where corresponde ao predicado de seleção da  A linguagem SQL possui um operador de comparação between
álgebra relacional. É formada por um predicado envolvendo para especificar condições em que um valor deve estar contido
atributos de relações que aparecem na cláusula from. num intervalo de valores (incluindo os seus extremos).
 Para encontrar os números de contas da agência da Caparica
com saldos superiores a 100.  Apresentar os números dos empréstimos de montantes entre
select account_number $90,000 e $100,000 (ou seja, ≥$90,000 e ≤$100,000)
from account select loan_number
where branch_name = ‘Caparica’ and balance > 100 from loan
 Os resultados de comparações podem ser combinados por where amount between 90000 and 100000
intermédio dos conetivos lógicos and, or, e not.
 Podem-se aplicar comparações ao resultado de expressões  Para negar a condição pode-se colocar o conectivo not antes de
aritméticas. between.

7 8

Operaç
Operações com Cadeias de Caracteres A clá
cláusula from
 O SQL inclui um mecanismo de concordância de padrões para  A cláusula from corresponde à operação de produto cartesiano da
comparações envolvendo cadeias de caracteres. Os padrões álgebra relacional. Indica as relações a consultar na avaliação da
são descritos recorrendo a dois caracteres especiais: expressão.
 percentagem(%). O carácter % concorda com qualquer subcadeia.  Encontrar o produto cartesiano borrower x loan
 sublinhado (_). O carácter _ concorda com qualquer carácter. select ∗
 Listar todos os clientes cuja rua inclua a subcadeia “Main”. from borrower, loan

select customer_name  Listar o nome, número de empréstimo e montante de todos os clientes


from customer que efetuaram um empréstimo na agência de Perryridge.
where customer_street like ‘%Main%’ select borrower.*, amount
from borrower, loan
where borrower.loan_number = loan.loan_number and
branch_name = ‘Perryridge’

9 10

A operaç
operação de Renomeaç
Renomeação Variá
Variáveis de tupla
 A linguagem SQL permite a renomeação de relações e atributos  As variáveis de tupla são definidas na cláusula from por
recorrendo à cláusula as : intermédio da cláusula as opcional.
old_name as new_name  Apresente os nomes de todos os clientes e respectivos números
 Listar o nome, número de empréstimo e montante de todos os dos empréstimos que possuam um empréstimo em alguma
clientes, renomeando o nome da coluna loan_number para agência.
loan_id. select customer_name, T.loan_number, S.amount
from borrower as T, loan as S
select customer_name, borrower.loan_number as loan_id, amount where T.loan_number = S.loan_number
from borrower, loan  Liste todas as agências que têm mais ativos do que pelo menos
where borrower.loan_number = loan.loan_number uma agência localizada em Brooklyn
 Caso se pretenda utilizar um nome com espaços, esse nome select distinct T.branch_name
deverá ser colocado entre aspas. from branch as T, branch as S
where T.assets > S.assets and S.branch_city = ‘Brooklyn’

11 12
Variá
Variáveis de tupla (cont) Ordenando as tuplas
 As variáveis de tuplas podem ser vistas como criando várias  Listar em ordem alfabética os nomes de todos os clientes que
cópias de uma mesma relação (similar às renomeações da possuem um empréstimo na agência de Perryridge
Álgebra Relacional.) select distinct customer_name
 Exemplo: Considere a relação: from borrower, loan
voos(numVoo,Matr,Data,Hora,De,Para) where borrower.loan_number = loan.loan_number and
branch_name = ‘Perryridge’
em que cada tupla denota um voo com nº numVoo, efetuado do order by customer_name
aeroporto De para o aeroporto Para no dia Data à hora Hora no
avião com Matrícula Matr.  Pode-se especificar desc para ordenação descente ou asc para
ordenação ascendente, para cada atributo; por omissão,
 Quais os pares de voos que usaram o mesmo avião num assume-se ordem ascendente.
mesmo dia?
 Ex. order by customer_name desc
select distinct T.numVoo, S.numVoo  Pode-se ter mais do que uma chave de ordenação, separando-
from voos as T, voos as S as com vírgulas
where T.Matr = S.Matr
and T.Data = S.Data
and T.numVoo < S.numVoo
13 14

Duplicados Duplicados (cont.)


 Em relações com valores duplicados, a linguagem SQL  Exemplo: suponha que as relações multiconjunto r1 (A, B)
especifica quantas cópias das tuplas aparecem no resultado. e r2 (C) são as seguintes:
 Versões Multiconjunto de alguns operadores da álgebra r1 = {(1, a) (2,a)} r2 = {(2), (3), (3)}
relacional – dadas relações mulitconjunto r1 e r2:  Então ΠB(r1) devolve {(a), (a)}, enquanto que ΠB(r1) x r2 é
1. Se existem c1 cópias da tupla t1 em r1, e t1 satisfaz a seleção σθ,, {(a,2), (a,2), (a,3), (a,3), (a,3), (a,3)}
então existem c1 cópias de t1 em σθ (r1).  A semântica de valores duplicados da SQL:
2. Para cada cópia da tupla t1 em r1, existe uma cópia da tupla ΠA(t1)
select A1,, A2, ..., An
em ΠA(r1), onde ΠA(t1) denota a projeção da tupla t1.
from r1, r2, ..., rm
3. Se existem c1 cópias da tupla t1 em r1 e c2 cópias da tupla t2 em r2,
então existem c1 x c2 cópias da tupla t1. t2 em r1 x r2 where P
é equivalente à versão multiconjunto da expressão:
Π A1,, A2, ..., An(σP (r1 x r2 x ... x rm))

15 16

Operaç
Operações com Conjuntos Operaç
Operações com Conjuntos
 As operações com conjuntos union, intersect, e except operam  Listar todos os clientes que têm um empréstimo ou uma conta:
sobre relações e correspondem aos operadores de álgebra (select customer_name from depositor)
relacional ∪, ∩, −. union
 Cada uma das operações anteriores elimina os valores (select customer_name from borrower)
duplicados automaticamente. Para reter duplicados deve-se  Listar todos os clientes que têm um empréstimo e uma conta:.
utilizar as respectivas versões multiconjunto union all, intersect (select customer_name from depositor)
all e except all. intersect
(select customer_name from borrower)
Suponha que uma tupla ocorre m vezes em r e n vezes em s,  Listar os clientes que têm uma conta mas não têm empréstimos
então ele ocorre:
(select customer_name from depositor)
 m + n vezes em r union all s except
 min(m,n) vezes em r intersect all s (select customer_name from borrower)
 max(0, m – n) vezes em r except all s

17 18
Funç
Funções de Agregaç
Agregação Funç
Funções de Agregaç
Agregação (cont.)
 Estas funções aplicam-se a multiconjuntos de valores de uma  Determinar o saldo médio das contas na agência de Perryridge.
coluna de uma relação, devolvendo um valor select avg (balance)
avg: valor médio from account
min: valor mínimo where branch_name = ‘Perryridge’
max: valor máximo  Calcular o número de clientes.
sum: soma dos valores
count: número de valores select count (*)
from customer
 Encontrar o número de depositantes do banco.
select count (distinct customer_name)
from depositor

19 20

Funç
Funções de agregaç
agregação – Group By Funç
Funções de Agregaç
Agregação – Clá
Cláusula Having

 Listar os nomes de todas as agências cujo valor médio dos


 Listar o número de depositantes por agência.
saldos das contas é superior a $1,200.

select branch_name, count (distinct customer_name) select branch_name, avg (balance)


from account
from depositor, account
where depositor.account_number = account.account_number group by branch_name
group by branch_name having avg (balance) > 1200
Nota: predicados na cláusula having são aplicados depois da
formação dos grupos, enquanto que os predicados na cláusula
Nota: Atributos na cláusula select fora de funções de agregação where são aplicados antes da formação dos grupos.
têm de aparecer na lista group by
Nota: Se aparecer mais do que um atributo em group by, então
cada grupo é formado pelas tuplas com valores iguais em todos
esses atributos

21 22

SQL Valores Nulos


 As tuplas podem conter valores nulos, denotado por null, em
 Estrutura básica alguns dos seus atributos.
 Operações com conjuntos  null significa um valor desconhecido ou que não existe.
 Funções de agregação  O predicado is null pode ser utilizado para testar a existência
de valores nulos.
 Valores nulos
 Ex. mostrar todos os números de empréstimos com um valor nulo
 Junções na coluna amount.
 Subconsultas aninhadas select loan_number
 Relações derivadas
from loan
where amount is null
 Visões  O resultado de uma expressão aritmética com null é null
 Modificação da Base de Dados  Ex. 5 + null devolve null
 Contudo, as funções de agregação ignoram os nulos
 A seguir será analisado este assunto mais detalhadamente

23 24
Valores Nulos e Ló
Lógica Trivalente Valores Nulos e Agregados
 Qualquer comparação com null retorna unknown  Calcule o total de todos os montantes dos empréstimos
 Ex. 5 < null ou null <> null ou null = null select sum (amount)
 Lógica trivalente usando o valor lógico unknown: from loan
 OR: (unknown or true) = true, (unknown or false) = unknown  A instrução acima ignora montantes nulos
(unknown or unknown) = unknown  Resultado é null se não existir nenhum montante não-nulo
 AND: (true and unknown) = unknown, (false and unknown) =  Todas as funções de agregação exceto count(*) ignoram tuplas
false, com valores nulos nos atributos agregados.
(unknown and unknown) = unknown
 NOT: (not unknown) = unknown
 “P is unknown” é verdade se o valor de P é unknown
 Resultado da condição da cláusula where é tratado como false
quando o seu valor é unknown

25 26

Operaç
Operações de Junç
Junção Junç
Junção versus Produto Cartesiano
 As operações de junção retornam uma relação como resultado  Listar o nome, número de empréstimo e montante de todos os
da combinação de duas outras relações. clientes que efetuaram um empréstimo na agência de
Perryridge.
 Estas operações adicionais são utilizadas habitualmente em select borrower.*, amount
subconsultas na cláusula from from borrower, loan
 Condição de junção – define quais as tuplas que são where borrower.loan_number = loan.loan_number and
combinadas nas duas relações, assim como quais os atributos branch_name = ‘Perryridge’
que aparecem no resultado da junção.  Versus

 Tipo de junção – define como tratar as tuplas que não estão select borrower.*, amount
from borrower natural inner join loan
relacionadas entre si (baseados na condição de junção).
where branch_name = ‘Perryridge’
Tipos de Junção Condições de Junção  A última separa claramente onde ir buscar os dados de onde se
inner join (junção interna) natural colocam condições “de filtragem” (seleção)
left outer join (junção externa esquerda) on <predicate>  Esta separação não só torna a leitura mais fácil, como pode ser
right outer join (junção externa direita) using (A1, A2, ..., An) aproveitada para implementações.
full outer join (junção externa completa)

27 28

Relaç
Relações de Exemplo Exemplos
 Relação loan
 loan inner join borrower on
loan_number branch_name amount loan.loan_number = borrower.loan_number
L-170 Downtown 3000 loan_number branch_name amount customer_name loan_number
L-230 Redwood 4000
L-170 Downtown 3000 Jones L-170
L-260 Perryridge 1700
L-230 Redwood 4000 Smith L-230
 Relação borrower
loan left outer join borrower on
customer_name loan_number loan.loan_number = borrower.loan_number
Jones L-170
Smith L-230 loan_number branch_name amount customer_name loan_number
Hayes L-155 L-170 Downtown 3000 Jones L-170
L-230 Redwood 4000 Smith L-230
L-260 Perryridge 1700 null null

29 30
Exemplos Exemplos
 loan full outer join borrower using (loan_number)
 loan natural inner join borrower
loan_number branch_name amount customer_name
loan_number branch_name amount customer_name
L-170 Downtown 3000 Jones
L-170 Downtown 3000 Jones L-230 Redwood 4000 Smith
L-230 Redwood 4000 Smith L-260 Perryridge 1700 null
L-155 null null Hayes
loan natural right outer join borrower
Listar todos os clientes que têm uma conta ou um empréstimo no
loan_number branch_name amount customer_name banco (mas não ambos!)
L-170 3000
select customer_name
Downtown Jones
from depositor natural full outer join borrower
L-230 Redwood 4000 Smith where account_number is null or loan_number is null
L-155 null null Hayes

31 32

Subconsultas aninhadas Consulta de exemplo


 SQL disponibiliza um mecanismo para aninhar consultas umas  Listar todos os clientes que têm contas e empréstimos no banco.
dentro de outras. select distinct customer_name
 Uma subconsulta é uma expressão select-from-where que se from borrower
encontra dentro de uma outra (sub)consulta. where customer_name in (select customer_name
 Subconsultas na clausula from são entendidas como cálculo de from depositor)
relações auxiliares.  Encontrar todos os clientes que têm empréstimos mas não
 As subconsultas na clausula where são utilizadas habitualmente possuem contas no banco
para efetuar testes de pertence a conjuntos, comparações entre select distinct customer_name
conjuntos e calcular a cardinalidade de conjuntos. from borrower
where customer_name not in (select customer_name
from depositor)

33 34

Consulta de exemplo Comparaç


Comparação de conjuntos
 Listar todos os clientes que têm uma conta e empréstimos na  Apresentar todas as agências que têm ativos superiores aos de
agência de Perryride alguma agência localizada em Brooklyn.
select distinct customer_name select distinct T.branch_name
from borrower natural inner join loan from branch as T, branch as S
where branch_name = “Perryridge” and where T.assets > S.assets and
(branch_name, customer_name) in S.branch_city = ‘Brooklyn’
(select branch_name, customer_name  A mesma consulta recorrendo à cláusula > some
from depositor natural inner join account)
select branch_name
from branch
 Nota: A consulta acima pode ser escrita de uma maneira muito where assets > some
mais simples. A formulação utilizada serve apenas para ilustrar (select assets
as possibilidades da linguagem SQL. from branch
where branch_city = ‘Brooklyn’)

35 36
Definiç
Definição da clá
cláusula Some Clá
Cláusula all
 F <comp> some r ⇔ ∃ t ∈ r : (F <comp> t)  Listar os nomes das agências com ativos superiores aos de
em que <comp> pode ser : <, ≤, >, =, ≠ todas as agências localizadas em Brooklyn.
select branch_name
0 from branch
(5< some 5 ) = true where assets > all
(ler: 5 menor que alguma tupla na relação ) (select assets
6
from branch
0 where branch_city = ‘Brooklyn’)
(5< some 5 ) = false  Sem o all
0 (select branch_name from branch)
(5 = some 5 ) = true except
(select branch_name
0 from branch T,branch S
(5 ≠ some 5 ) = true (pois 0 ≠ 5) where S.branch_city = ‘Brooklyn’ and T.assets < S.assets)
(= some) ≡ in
No entanto, (≠ some) ≡ not in
37 38

Definiç
Definição da clá
cláusula all Teste de Relaç
Relações Vazias
 A construção exists devolve o valor true se a subconsulta é não
 F <comp> all r ⇔ ∀ t ∈ r : (F <comp> t) vazia.
 exists r ⇔ r ≠ Ø
0
(5< all 5 ) = false  not exists r ⇔ r = Ø
6
6
(5< all 10 ) = true

4
(5 = all 5 ) = false

4
(5 ≠ all
6 ) = true (dado que 5 ≠ 4 e 5 ≠ 6)
(≠ all) ≡ not in
Contudo, (= all) ≡ in
39 40

Consulta de exemplo Consulta de exemplo – cont.


 Listar todos os clientes que têm uma conta em todas as agências de Aqui a subconsulta:
Brooklyn.
select distinct S.customer_name (select branch_name
from depositor as S from branch
where where branch_city = ‘Brooklyn’)
not exists ( encontra todas as agências em Brooklin
(select branch_name
from branch
where branch_city = ‘Brooklyn’)
except Já a subconsulta:
(select account.branch_name (select account.branch_name
from depositor as T natural inner join account
where S.customer_name = T.customer_name) from depositor as T natural inner join account
) where S.customer_name = T.customer_name)
 Notas: )
 Repare que X – Y = Ø ⇔ X ⊆ Y Encontra todas as agências em que o cliente S.customer_name
 Não se pode escrever esta consulta com combinações de = all ou de suas tem uma conta. Portanto, a cláusula select externa toma cada
variantes.
cliente e testa se o conjunto de todas as agências em que esse
 Em álgebra relacional esta consulta escrever-se-ia com uma divisão:
cliente tem uma conta contém o conjunto de todas as agências
∏customer_name,branch_name(depositor account) ÷ localizadas em Brooklin
∏branch_name(σbranch_city=‘Brooklyn’(branch))
41 42
Testar ausência de tuplas duplicadas Consulta de exemplo
 Listar todos os clientes que têm pelo menos duas contas na
agência de Perryridge.
 A construção unique verifica se o resultado de uma
subconsulta possui tuplas duplicadas. select distinct T.customer_name
 Encontrar todos os clientes que têm só uma conta na agência from depositor T
de Perryridge. where not unique (
select T.customer_name select R.customer_name
from depositor as T from account natural inner join depositor as R
where unique ( where T.customer_name = R.customer_name and
select R.customer_name account.branch_name = ‘Perryridge’)
from account natural inner join depositor as R
where T.customer_name = R.customer_name and
account.branch_name = ‘Perryridge’)

43 44

Visões Visões
 Em certas circunstâncias, não é desejável que todos os usuários  Mecanismo que permite ocultar (esconder) informação de certos
possam acessar a todo o modelo lógico (i.e. a todas as relações usuários. Para criar uma visão utilizamos o comando:
armazenadas na base de dados)
 Considere o caso de um empregado que necessita de saber o create view v as <query expression>
número de empréstimo de um cliente, mas que não precisa de
em que:
saber o montante desse empréstimo. Este empregado deverá
ver apenas a relação descrita por  <query expression> é qualquer expressão SQL válida
select costumer_name, loan_number  O nome da visão é v
from borrower natural inner join loan

 Qualquer relação que não pertença ao modelo conceptual mas


que se torne visível ao utilizador como uma “relação virtual” é
designada por visão.

45 46

Exemplo Relaç
Relações Derivadas
 Uma visão contendo todas as agências e respectivos clientes  SQL permite que uma expressão de subconsulta seja usada na
create view all_customer as cláusula from.
(select branch_name, customer_name  Determinar o saldo médio das contas em agências cujo saldo médio
from depositor natural inner join account) é superior a $1200.
union
(select branch_name, customer_name select branch_name, avg_balance
from borrower natural inner join loan) from (select branch_name, avg (balance) as avg_balance
from account
 Listar todos os clientes da agência de Perryridge group by branch_name
select customer_name )
from all_customer where avg_balance > 1200
where branch_name = ‘Perryridge’ Repare que neste caso não foi necessário recorrer à cláusula
having, dado que é calculada a relação temporária result na
cláusula from, e assim os atributos de result podem ser utilizados
diretamente em uma cláusula where.

47 48
Clá
Cláusula With Modificaç
Modificação da base de Dados – Remoç
Remoção
 A remoção de tuplas de uma tabela (ou visão) é feita em SQL
 A cláusula with permite a definição local de visões relativas a com a instrução
uma consulta, em vez de globalmente. Análogo a
procedimentos locais de uma linguagem de programação. É delete from <tabela ou visão>
uma visão temporária where <Condição>
 Encontrar as contas de maior saldo  Apagar todas as contas da agência de Perryridge
delete from account
with max_balance(value) as where branch-name = ‘Perryridge’
( select max (balance)
from account )
select account_number
from account, max_balance
where account.balance = max_balance.value

49 50

Exemplo de remoç Modificaç


Modificação da base de dados – Inserç
Inserção
remoção
 Apagar todas as contas de todas as agências na cidade de  A inserção de tuplas numa tabela (ou visão) é feita em SQL com
Needham. a instrução
delete from depositor insert into <tabela ou visão>
where account-number in values <Conjunto de tuplas>
(select account-number  Adicionar uma nova tupla a account
from branch natural inner join account insert into account
where branch-city = ‘Needham’) values (‘A-9732’, ‘Perryridge’,1200)
ou equivalentemente
delete from account
where branch-name in (select branch-name insert into account (branch-name, balance, account-number)
from branch values (‘Perryridge’, 1200, ‘A-9732’)
where branch-city = ‘Needham’)
 Adicionar uma nova tupla a account em que balance é null
insert into account
values (‘A-777’,‘Perryridge’, null)

51 52

Modificaç
Modificação da base de dados – Atualizaç
Atualização Modificaç
Modificação da base de dados – Atualizaç
Atualização

 A atualização de tuplas de uma tabela (ou visão) é feita em SQL  Pagar juros de 6% a todas as contas com saldos superiores a
com a instrução $10,000, e juros de 5% às restantes contas.
update <tabela ou visão>  Escrever duas instruções de update:
set <Atributo> = <Expressão>, <Atributo> = <Expressão>, ... update account
where <Condição> set balance = balance ∗ 1.06
where balance > 10000
 Pagar juros de 1% a todas as contas da agência Perryride.
update account
set balance = balance ∗ 1.01 update account
set balance = balance ∗ 1.05
where branch_name = ‘Perryride’
where balance ≤ 10000
 A ordem é importante
 Pode ser efetuado de maneira mais “limpa” recorrendo à instrução
case

53 54
Instruç
Instrução Case para Atualizaç
Atualizações
condicionais Atualizaç
Atualização de uma visão
 Modificações nas bases de dados através de visões devem
 Pagar juros de 6% a todas as contas com saldos superiores a
ser traduzidas para modificações das verdadeiras relações
$10,000, e juros de 5% às restantes contas.
presentes na base de dados.
update account
 Ex. com uma visão com a informação sobre empréstimos,
set balance = case escondendo o atributo amount
when balance <= 10000 then balance *1.05
else balance * 1.06 create view branch-loan as
select branch-name, loan-number
end
from loan
 a adição de uma nova tupla a branch-loan
insert into branch-loan
values (‘Perryridge’, ‘L-307’)
 deve ser traduzida na inserção na relação loan da tupla
(‘L-307’, ‘Perryridge’, null)

55 56

Atualizaç
Atualização de uma visão (cont
(cont)) Transaç
Transações
 Algumas atualizações através de visões são impossíveis de traduzir
para atualizações das relações da base de dados:  Uma transação é uma sequência de instruções de consulta e de
 Ex. considere a visão atualização executadas numa unidade singular.
create view v1 as  As transações são iniciadas implicitamente e terminadas com
select *  commit work: torna permanentes todas as atualizações efetuadas à base
from loan de dados, ou
where branch-name = ‘Perryridge’
 rollback work: desfaz todas as alterações efetuadas pela transação.
 A seguinte adição é impossível
 Exemplo motivador
insert into v1
values (‘L-307’,‘Downtown’,1000)  A transferência de dinheiro de uma conta para outra requer duas operações:
 Outras não têm tradução única:  debitar uma conta e creditar outra
 Ex. considere a visão  Se um dos passos anteriores é bem sucedido e o outro falha, a base de dados
create view all_costumers as fica num estado inconsistente
(select * from depositor) union (select * from borrower)
 Portanto, ou ambos os passos devem ocorrer ou ambos falhar
 Toda a adição em all_costumers não tem tradução única:
 Se qualquer operação em uma transação falha, todo o trabalho efetuado
 Deve introduzir-se em depositor ou em borrower???
na transação pode ser descartado através de rollback work.
 Diante disto, o SQL opta por restringir aquilo que é permitido. A
maioria das implementações SQL permite apenas a atualização de  No caso de falhas no sistema, o rollback das transações incompletas é
visões simples (sem agregações) definidas sobre uma única relação. feito automaticamente,

57 58

Transaç
Transações (cont.)
 Na maioria dos sistemas de bases de dados, cada instrução
SQL que é executado com sucesso é “committed”
automaticamente.
 Cada transação é assim constituída por apenas uma instrução.
 Normalmente, o “commit” automático pode ser desligado,
permitindo transações com múltiplas instruções.
 Outra opção em SQL1999: colocar as instruções dentro do bloco
begin atomic

end

59

Potrebbero piacerti anche