Questão de Banco de Dados — SQL — CESGRANRIO 2008
Banco de DadosSQL
- Código
- cg027247
- Banca
- CESGRANRIO
- Órgão
- BNDES
- Ano
- 2008
- Nível
- Superior
- Cargo
- Profissional Básico - Análise de Sistemas - Desenvolvimento
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?
- AComo 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.
- BComo "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.
- EO 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.