Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Novato: duda uso trigger mysql

Estas en el tema de Novato: duda uso trigger mysql en el foro de Bases de Datos General en Foros del Web. COCHES matricula primary key alquilado ('SI' o 'NO') HISTORIAL id primary key matricula usuario fecha_alquiler (se genera automáticamente al crearse el registro) fecha_retorno @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 13/07/2015, 11:27
 
Fecha de Ingreso: julio-2015
Mensajes: 8
Antigüedad: 8 años, 9 meses
Puntos: 0
Novato: duda uso trigger mysql

COCHES
matricula primary key
alquilado ('SI' o 'NO')

HISTORIAL
id primary key
matricula
usuario
fecha_alquiler (se genera automáticamente al crearse el registro)
fecha_retorno

Código MySQL:
Ver original
  1. DELIMITER
  2.     CREATE TRIGGER alquilado_actualizacion_fecha_retorno
  3.         AFTER UPDATE ON coches.alquilado /*(salta al modificar el campo alquilado de la tabla coches)*/
  4.         FOR EACH ROW
  5.         BEGIN
  6.      
  7.         UPDATE historial
  8.         SET fecha_retorno = SYSDATE() /*(actualiza la fecha_retorno cuando cumple las siguiente condiciones)*/
  9.          
  10.         WHERE id /*historial*/ =  (SELECT id  FROM historial
  11.         WHERE fecha_alquiler = (SELECT MAX(fecha_alquiler) FROM historial WHERE matricula = coches.id_matricula)); /*selecciona el id del historial con la fecha de alquiler mas reciente de la matricula que se ha actualizado*/
  12.          
  13.     END;
  14.     DELIMITER;

He creado este disparador para que cuando modifique el campo de alquilado (tabla coches) a 'NO' automáticamente en la tabla de historial actualice la fecha_retorno del coche del último usuario en alquilarlo. He probado este mismo disparador en phpmyadmin pero ni si quiera me deja agregarlo por problemas en la sintaxis. Me podéis decir que estoy haciendo mal ¿? Gracias.
  #2 (permalink)  
Antiguo 13/07/2015, 11:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Novato: duda uso trigger mysql

Cita:
Me podéis decir que estoy haciendo mal ¿
Bueno, phpMyadmin no es un buen recurso para crear rutinas almacenadas, como los triggers o P. Especialmente porque los DELIMITER se especifican únicamente para codificar en la consola de MySQL, o para cargarlos por script.
Además ni siquiera los estás usando bien, porque el delimiter debe indicar el terminador del script, y no lo estás poniendo.

Para ser usado en phpMyadmin tendrías que tener algo como:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE TRIGGER alquilado_actualizacion_fecha_retorno
  3.      ...
  4.      -- cuerpo del trigger
  5.      ...
  6. END $$
Y luego, abajo de la ventana de edición verás un textbox que dice algo como como "delimitador" y alli le pones el "$$"que usé, y lo ejecutas.

Por otro lado, un TRIGGER se dispara por eventos de tabla y no de campos. Por lo que no puedes crear un trigger que se dispare sobre el campo. Te dará error el CREATE porque no existe ninguna base llamada "coches", ni una tabla llamada "alquilado".
Por favor, lee el manual para los detalles.
https://dev.mysql.com/doc/refman/5.6...e-trigger.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 13/07/2015, 11:49
 
Fecha de Ingreso: julio-2015
Mensajes: 8
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Novato: duda uso trigger mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, phpMyadmin no es un buen recurso para crear rutinas almacenadas, como los triggers o P. Especialmente porque los DELIMITER se especifican únicamente para codificar en la consola de MySQL, o para cargarlos por script.
Además ni siquiera los estás usando bien, porque el delimiter debe indicar el terminador del script, y no lo estás poniendo.

Para ser usado en phpMyadmin tendrías que tener algo como:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE TRIGGER alquilado_actualizacion_fecha_retorno
  3.      ...
  4.      -- cuerpo del trigger
  5.      ...
  6. END $$
Y luego, abajo de la ventana de edición verás un textbox que dice algo como como "delimitador" y alli le pones el "$$"que usé, y lo ejecutas.

Por otro lado, un TRIGGER se dispara por eventos de tabla y no de campos. Por lo que no puedes crear un trigger que se dispare sobre el campo.
Te dará error el CREATE porque no existe ninguna base llamada "coches", ni una tabla llamada "alquilado".
Por favor, lee el manual para los detalles.
[url]https://dev.mysql.com/doc/refman/5.6/en/create-trigger.html[/url]
En ese caso el disparador no me sirve, tendré que hacerlo directamente desde php :/
  #4 (permalink)  
Antiguo 13/07/2015, 12:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Novato: duda uso trigger mysql

Cita:
Iniciado por grexit Ver Mensaje
En ese caso el disparador no me sirve, tendré que hacerlo directamente desde php :/
En realidad puedes hacerlo con un stored procedure, y poner TODA la lógica de lo qu deseas hacer allí.
Eso es lo que se hace en las bases de datos bien administradas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 13/07/2015, 12:15
 
Fecha de Ingreso: julio-2015
Mensajes: 8
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Novato: duda uso trigger mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
En realidad puedes hacerlo con un stored procedure, y poner TODA la lógica de lo qu deseas hacer allí.
Eso es lo que se hace en las bases de datos bien administradas.
Ni zorra de que me hablas, algún manual de como hacerlo ¿? ahora googleare a ver si encuentro info al respecto, gracias por el consejo

Etiquetas: campo, mysql, php, select, tabla, trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:00.