Cursos / Informática para Internet / Banco de dados / Aula
Agora, vamos analisar os exemplos a seguir para entendermos como funciona os comandos INSERT, UPDATE e DELETE com visões.
Inserir o nome do funcionário Maria da Silva e o seu CPF 1111111 na tabela empregados por meio da visão funcionario.
A resposta do SGBD, no caso, o MySQL, ao comando apresentado é ilustrada na Figura 7. Visando uma melhor compreensão do que foi realizado pelo sistema ao processar o referido comando, são exibidos, também, na Figura 7, os dados existentes na visao funcionario e na tabela empregados após o referido comando de inclusão (INSERT).
Observe que os valores inseridos foram corretamente introduzidos na tabela empregados. No campo empreg_codigo não foi inserido nenhum valor, entretanto, esse campo apresenta valor igual a 1, pois foi definido com sendo AUTO_INCREMENT (Figura 4) e ao introduzir um novo registro nesta tabela ele é automaticamente incrementado. Nos campos empreg_sexo e empreg_datanascimento, não foram introduzidos nenhum valor, assumindo o seu valor padrão NULL.
Mas será que podemos inserir o nome de um funcionário na tabela empregados através da visão salario? Para responder a essa pergunta, vamos analisar a estrutura da tabela empregados (Figura 4). A tabela empregados contém 5 campos, entre os quais o campo empreg_cpf que foi definido como sendo do tipo CHAR e não aceita o valor NULL, ou seja, não se pode inserir um registro nesta tabela sem que seja inserido um valor no campo empreg_cpf. Portanto, não podemos atualizar a tabela empregados através da visão salario.
Quando uma visão incluir todas as colunas que possuem a restrição NOT NULL de todas as tabelas a qual ela faz referência, então, dizemos que a visão é atualizável. Uma visão não atualizável é aquela que não inclui todas as colunas NOT NULL das tabelas que ela faz referência.
Portanto, a visão salario não é atualizável, pois ela não contém os campos empreg_cpf (tabela empregados) e desc_codempregados (tabela descontos). Observe que os atributos empreg_codigo (tabela empregados), pag_codigo (tabela pagamentos) e desc_codigo (tabela descontos) não são considerados nessa discussão, pois mesmo sendo NOT NULL são do tipo AUTO INCREMENT.
Versão 5.3 - Todos os Direitos reservados