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

Trigger

Estas en el tema de Trigger en el foro de Mysql en Foros del Web. Hola a todos. necesitaria un poco de ayuda ya que soy nuevo en esto y necesito hacer un trigger. Tengo una base de datos con ...
  #1 (permalink)  
Antiguo 13/07/2011, 19:31
 
Fecha de Ingreso: julio-2011
Mensajes: 16
Antigüedad: 12 años, 9 meses
Puntos: 0
Trigger

Hola a todos.
necesitaria un poco de ayuda ya que soy nuevo en esto y necesito hacer un trigger.

Tengo una base de datos con los campos DNI(int), anterior(date), control(date), siguiente(date).

Lo que necesito es que cuando la de la columna control sea igual a la fecha actual
-a anterior asignarle control
-a control asignarle siguiente
-a siguiente asignarle siguiente incrementado en 6 meses.

Tenia pensado hacerlo de la siguiente manera, pero nose si lo estoy escribiendo bien y nose como seguirlo.

CRETATE TRIGGER actualizacion
AFTER INSERT ON Controles
FOR EACH ROW BEGIN
IF control = CURRENT_DATE {
NEW.anterior = OLD control
NEW.control = OLD siguiente
. . .
. . .
}
END;
Desde ya muchisimas gracias.
  #2 (permalink)  
Antiguo 13/07/2011, 20:44
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: Trigger

La idea está cerca, pero hay algunas observaciones:

1) Si el trigger es para un INSERT, entonces la pseudovariable OLD no existe, porque OLD sólo existe para los UPDATE, y no es el caso. Eso es porque OLD representa el registro a modificar en su estado actual y NEW son los nuevos datos, los que pueden ser todos los campos, o sólo algunos. En ese contexto, OLD no existe en el INSERT porque en una inserción no hay estado anterior de un registro; es todo nuevo.

2) Si es para un UPDATE, ¿qué es lo que estarías actualizando? ¿Cuál o cuáles campos? ¿Qué registro o registros abarcaría?

3) Si es un UPDATE, todo el trigger es innecesario, porque la misma operación se puede escribir en el UPDATE, sin ningún problema:
Código MySQL:
Ver original
  1. UPDATE Controles
  2. SET anterior = IF(control = CURDATE(), control, anterior),
  3.        control = IF(control = CURDATE(), siguiente, control),
  4.        siguiente = IF(control = CURDATE(), ADDDATE(siguiente, INTERVAL 6 MONTH), siguiente)
  5. WHERE dni = valorBuscado;
Donde valorBuscado es un DNI cuyos datos se quieren actualizar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 13/07/2011 a las 20:51
  #3 (permalink)  
Antiguo 13/07/2011, 20:56
 
Fecha de Ingreso: julio-2011
Mensajes: 16
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Trigger

Gracias x la respuesta xD.....

lo que tengo que actualizar es:

-a campo anterior asignarle campo control
-a campo control asignarle campo siguiente
-a campo siguiente asignarle campo siguiente incrementado en 6 meses.
  #4 (permalink)  
Antiguo 13/07/2011, 21:01
 
Fecha de Ingreso: julio-2011
Mensajes: 16
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Trigger

Cita:
Iniciado por gnzsoloyo Ver Mensaje
La idea está cerca, pero hay algunas observaciones:

1) Si el trigger es para un INSERT, entonces la pseudovariable OLD no existe, porque OLD sólo existe para los UPDATE, y no es el caso. Eso es porque OLD representa el registro a modificar en su estado actual y NEW son los nuevos datos, los que pueden ser todos los campos, o sólo algunos. En ese contexto, OLD no existe en el INSERT porque en una inserción no hay estado anterior de un registro; es todo nuevo.

2) Si es para un UPDATE, ¿qué es lo que estarías actualizando? ¿Cuál o cuáles campos? ¿Qué registro o registros abarcaría?

3) Si es un UPDATE, todo el trigger es innecesario, porque la misma operación se puede escribir en el UPDATE, sin ningún problema:
Código MySQL:
Ver original
  1. UPDATE Controles
  2. SET anterior = IF(control = CURDATE(), control, anterior),
  3.        control = IF(control = CURDATE(), siguiente, control),
  4.        siguiente = IF(control = CURDATE(), ADDDATE(siguiente, INTERVAL 6 MONTH), siguiente)
  5. WHERE dni = valorBuscado;
Donde valorBuscado es un DNI cuyos datos se quieren actualizar.


Gracias x la respuesta xD.....

lo que tengo que actualizar es:

-a campo anterior asignarle campo control
-a campo control asignarle campo siguiente
-a campo siguiente asignarle campo siguiente incrementado en 6 meses.
  #5 (permalink)  
Antiguo 13/07/2011, 21:13
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: Trigger

Cita:
lo que tengo que actualizar es:

-a campo anterior asignarle campo control
-a campo control asignarle campo siguiente
-a campo siguiente asignarle campo siguiente incrementado en 6 meses.
O sea, lo que hace el UPDATE que te pasé... ¿Lo leíste?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 13/07/2011, 21:17
 
Fecha de Ingreso: julio-2011
Mensajes: 16
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Trigger

Cita:
Iniciado por gnzsoloyo Ver Mensaje
La idea está cerca, pero hay algunas observaciones:

1) Si el trigger es para un INSERT, entonces la pseudovariable OLD no existe, porque OLD sólo existe para los UPDATE, y no es el caso. Eso es porque OLD representa el registro a modificar en su estado actual y NEW son los nuevos datos, los que pueden ser todos los campos, o sólo algunos. En ese contexto, OLD no existe en el INSERT porque en una inserción no hay estado anterior de un registro; es todo nuevo.

2) Si es para un UPDATE, ¿qué es lo que estarías actualizando? ¿Cuál o cuáles campos? ¿Qué registro o registros abarcaría?

3) Si es un UPDATE, todo el trigger es innecesario, porque la misma operación se puede escribir en el UPDATE, sin ningún problema:
Código MySQL:
Ver original
  1. UPDATE Controles
  2. SET anterior = IF(control = CURDATE(), control, anterior),
  3.        control = IF(control = CURDATE(), siguiente, control),
  4.        siguiente = IF(control = CURDATE(), ADDDATE(siguiente, INTERVAL 6 MONTH), siguiente)
  5. WHERE dni = valorBuscado;
Donde valorBuscado es un DNI cuyos datos se quieren actualizar.
Cita:
Iniciado por gnzsoloyo Ver Mensaje
O sea, lo que hace el UPDATE que te pasé... ¿Lo leíste?

Sisis lo vi, muy bueno y anda perfecto.......

ahora voy a ver como hago para que lo realice automaticamente, xq lo pongo en el sql y lo realiza pero lo pruebo en php agregandole lo que correspone y no lo hace solo ejjeje

Etiquetas: campos, 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 04:29.