Banco de dadosBanco de dados relacionais
- (CESGRANRIO 2008)
Um funcionário, encarregado de verificar o correto funcionamento de uma base de dados relacional, faz o seguinte teste:
select nome from emp where matr = 123;
O resultado é vazio. Então ele executa:
insert into emp(matr, nome, salario, ativo)
values (123, 'José da Silva', 2000, 'N');
commit;
O banco de dados não retorna erro e informa que inseriu uma linha.
Por fim, para verificar, ele consulta novamente:
select nome from emp where matr = 123;
O resultado continua vazio.
Supondo que o sistema gerenciador de banco de dados esteja funcionando corretamente, que opção explica o ocorrido?
A) Como o funcionário executou o primeiro SELECT momentos antes de executar o INSERT, o resultado ficou na memória cache do computador e não foi executado pelo banco de dados na segunda vez. Somente após o protocolo LRU ter retirado do cache o resultado do SELECT é que ele será novamente executado.
B) Como "emp" é uma visão e uma visão é nada menos que uma consulta gravada no banco de dados, nunca é possível usá-la em operações de manipulação de dados. O COMMIT ignora a inserção anterior.
C) "emp" é uma visão que retorna todos os empregados ativos (ativo='S'), mas foi criada sem a expressão WITH CHECK OPTION, que evitaria o problema acima.
D) "emp" não é uma tabela, mas uma visão que retorna todos os empregados ativos (ativo='S') e foi criada com a expressão WITH CHECK OPTION. Dessa forma, como o empregado José da Silva não está ativo, o banco de dados não gravou o registro no momento do COMMIT.
E) O funcionário executou o SELECT pouco tempo após a inserção do registro. Mesmo finalizando a transação com o COMMIT, o registro está em memória e ainda não foi gravado no disco. Somente após o CHECKPOINT é que o registro estará disponível para consulta.
Próximo:
EXERCÍCIOS - Exercício 43
Vamos para o Anterior: Exercício 41
Tente Este: Exercício 20
Primeiro: Exercício 1
VOLTAR ao índice: Banco de dados