Cadernos de Questões

Provas Favoritas

Filtros Salvos

Foram encontradas 70 questões.
#2905874

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?

  • 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 docacheo resultado do SELECT é que ele será novamente executado.
  • 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.
  • "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.
  • "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.
  • 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.
Fale com IAgo
IAgo - Assistente IAProva
IA
Olá! Sou o IAgo, seu assistente aqui no IAProvatec 😊
Veja como posso te ajudar:
Agora