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

Validar dato OLD en trigger mysql

Estas en el tema de Validar dato OLD en trigger mysql en el foro de Mysql en Foros del Web. hola, tal ves sea algo bastante simple pero quisiera saber como puedo comprobar si existe realmente una variable OLD en trigger de mysql he probado ...
  #1 (permalink)  
Antiguo 10/12/2011, 17:34
 
Fecha de Ingreso: agosto-2011
Mensajes: 5
Antigüedad: 12 años, 8 meses
Puntos: 0
Validar dato OLD en trigger mysql

hola, tal ves sea algo bastante simple pero quisiera saber como puedo comprobar si existe realmente una variable OLD en trigger de mysql he probado con lo siguiente

IF(OLD.variable) THEN

pero no me funciona y necesito hacer una resta entre el valor anterior y el nuevo en el caso de que se halla modificado, tambien quisiera saber si en una sentencia update existe los datos OLD solo si se modifica y es distinta?? desde ya muchas gracias.
  #2 (permalink)  
Antiguo 10/12/2011, 17:59
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, 5 meses
Puntos: 2658
Respuesta: Validar dato OLD en trigger mysql

OLD es una pseudovariable, no una variable. Es una referencia temporal al registro preexistente, y sólo existe para los TRIGGERS definidos para UPDATE o DELETE. En ese sentido, es una referencia que apunta a un registro físico, y sus únicos valores se corresponden con los mismos campos que componen a la tabla, pero sólo para ese registro.
Incluso, para ser específico, en tu caso sólo podrías intentar lo que quieres en el caso de un TRIGGER definido para AFTER UPDATE, ya que requieres que la evaluación del dato se realice antes de que sea eliminado.
No hace falta probar la existencia de OLD, porque se trata de una estructura interna definida por MySQL, y por tanto siempre existe dentro de su ambiente.
Cita:
tambien quisiera saber si en una sentencia update existe los datos OLD solo si se modifica y es distinta?
OLD y NEW como pseudovariables sólo existen en el contexto de un TRIGGER, nada más, lo que significa que no pueden ser invocados en una consulta fuera del trigger de ninguna forma.
Ahora bien, en tu caso (restar el valor nuevo si existe un valor en el registro de la tabla) no necesariamente requiere que se haga en un TRIGGER. Bien se podría hacer en la propia sentencia de UPDATE, bien redactada:
Código MySQL:
Ver original
  1. SET campo1 = IF(campo1>0, campo1-valornuevo, valornuevo)
  2. WHERE a_id = pkBuscada;
Esto es especialmente conveniente si el proceso que quieres poner en el TRIGGER es opcional, porque (no te olvides) los TRIGGERS se ejecutan en todas y cada una de las ocasiones en que el evento controlado se produzca. Siempre.
Si tu resta no se debe verificar todas las veces, si al menos hay una ocasión en que no se deba hacer, entonces no es correcto usar un TRIGGER para implementarla.

Los TRIGGERS son cosa que hay que manejar con precaución, y sólo si son estrictamente necesarios, porque suman carga al proceso servidor. Si los pones donde no se necesitan, o donde se pueda hacer de otra forma, afectas inútilmente la performance del sistema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: dato, sql, 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 20:53.