Hola,
 
Estoy realizando un proyecto en el que poseo una base de datos mysql. Necesito hacer un trigger pero no consigo implementarlo bien, siempre me da error de sintaxis.
 
Voy a intentar explicar lo mas rapido posible en que consiste: Se trata de un sistema que permite reservar asientos de tren. 
Tengo en mi base de datos tres tablas, tengo mas, pero para el trigger en cuestion solo utilizo esas tres:
 
trayectos(ntrayecto, origen, destino, horaSalida, horaLlegada, id_ruta) (id_ruta es una clave foranea al identificardor de otra tabla que se llama ruta) 
 
asientos(nvagon, nasiento, clase, libre, trayecto_id, precio) (trayecto_id es una clave foranea a ntrayecto de trayectos)
 
reserva(nreserva,nombre, apellidos, nvagon, nasiento, trayecto_id, email, tarifa,codCliente) 
 
La idea es que cuando se inserte una nueva reserva se modifique el asiento correspondiente y se ponga el parametro libre a 0, indicando de este modo q esta ocupado. 
El problema viene en que una ruta puede incluir mas de un trayecto. Cada asiento pertenece a un trayecto, entonces cuando se reserva el asiento de un trayecto concreto se deben poner a 0 tambien el parametro libre de los trayectos, que por decir de alguna manera, estén incluidos en el trayecto reservado en ese momento. 
 
 
Por ejemplo: 
Tenemos la ruta: madrid- segovia-valladolid-leon
en esta ruta tenemos los siguientes trayectos:
madrid-segovia,
madrid-valladolid,
madrid-leon,
segovia-valladolid,
segovia-leon y 
valladolid-leon
 
 
Entonces si un usuario reserva el trayecto madrid valladolid y se le asigna como asiento el que tiene nvagon=1 y nasiento=5, pues tienen q ponerse a ocupado los asientos que tienen nvagon=1, nasiento=5 y que pertenecen a los trayectos
incluidos en el trayecto madrid-valladolid. En ese caso serian todos menos valladolid-leon.  Para sacar estos trayecto "incluidos" uso los horarios de salida y de llegada, eligiendo por tanto aquellos trayectos que tiene como hora de salida la misma o mayor que el trayecto en cuestion e igual para la hora de llegada solo qeu siendo menor o igual. 
 
El trigger que he hecho es el siguiente, pero me da error de sintaxis y no entiendo porque: 
 
create trigger Asientos
before insert on reserva
for each row
begin
declare ruta int;
declare hS time;
declare hL time;
 
select id_ruta into ruta, horaSalida into hS, horaLlegada into hL
from trayecto
where ntrayecto=NEW.trayecto_id;
 
for cursor in (select ntrayecto from trayecto where horaSalida>=hS AND horaLlegada<=hL AND id_ruta=ruta)
   loop
      update asientos
      set libre=0
      where nvagon=NEW.nvagon AND nasiento=NEW.nasiento AND trayecto_id=cursor.trayecto_id;
   end loop;
 
end
 
 
Muchas gracias de antemano por la ayuda!! 
 
un saludo. 
   
 

