97 - Vistas actualizables (insert, update y delete)


Problema:

Borramos las tablas si existen y luego las creamos:

 drop table if exists alumnos;
 drop table if exists profesores;
 
 create table alumnos(
  documento char(8),
  nombre varchar(30),
  nota decimal(4,2),
  codigoprofesor int,
  primary key(documento)
 );

 create table profesores (
   codigo int auto_increment,
   nombre varchar(30),
   primary key(codigo)
 );

Insertamos algunas filas en las dos tablas:

 insert into alumnos values('30111111','Ana Algarbe', 5.1, 1);
 insert into alumnos values('30222222','Bernardo Bustamante', 3.2, 1);
 insert into alumnos values('30333333','Carolina Conte',4.5, 1);
 insert into alumnos values('30444444','Diana Dominguez',9.7, 1);
 insert into alumnos values('30555555','Fabian Fuentes',8.5, 2);
 insert into alumnos values('30666666','Gaston Gonzalez',9.70, 2);

 insert into profesores(nombre) values ('Maria Luque');
 insert into profesores(nombre) values ('Jorje Dante'); 

Borramos la vista si ya existe y luego la creamos:

 drop view if exists vista_nota_alumnos_aprobados;

 -- Creamos una vista con los datos de todos los alumnos que tienen
 -- una nota mayor o igual a 7, junto con el nombre del profesor que
 -- lo calificó
 create view vista_nota_alumnos_aprobados as
   select documento,
          a.nombre as nombrealumno,
          p.nombre as nombreprofesor,
          nota,
          codigoprofesor
     from alumnos as a
     join profesores as p on a.codigoprofesor=p.codigo
     where nota>=7;

Mostramos el resultado de la vista:

select * from vista_nota_alumnos_aprobados;

Mediante la vista insertamos un nuevo alumno calificado por el profesor con código 1:

insert into vista_nota_alumnos_aprobados(documento, nombrealumno, nota, codigoprofesor)
  values('99999999','Rodriguez Pablo', 10, 1);

Mostramos la vista:

   
select * from vista_nota_alumnos_aprobados;  

Consultamos la tabla base: alumnos, tenemos una nueva fila con el alumno insertado:

select * from alumnos;

Modificamos la nota de un alumno aprobado mediante la vista:

update vista_nota_alumnos_aprobados set nota=10 
  where documento='30444444';
  
select * from alumnos;



Retornar