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

trigger que actualice la misma tabla

Estas en el tema de trigger que actualice la misma tabla en el foro de Mysql en Foros del Web. Hola amig@s! Quiero hacer un Trigger en MariaDB(es la misma sintaxis de Mysql, no?) Para que al actualizar un capo de la tabla, se copie ...
  #1 (permalink)  
Antiguo 21/09/2017, 10:00
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
trigger que actualice la misma tabla

Hola amig@s!
Quiero hacer un Trigger en MariaDB(es la misma sintaxis de Mysql, no?) Para que al actualizar un capo de la tabla, se copie el anterior valor a otro campo de esa tabla.
Tomando en cuenta 3 campos: id_articulo, precio, precio_antiguo
Quiero que cuando se vaya a actualizar precio, precio_antiguo tome el valor de precio antes de ser actualizado.
Era algo así como
CREATE TRIGGER tr_actualiza_precio BEFORE UPDATE ON tabla_precio FOR EACH ROW
BEGIN
UPDATE tabla_precio SET NEW.precio_ultimo = OLD.precio

Ya no se usan ni el NEW ni el OLD ni... Me da error lo ponga como lo ponga...

Gracias por la ayuda!
  #2 (permalink)  
Antiguo 21/09/2017, 10:06
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: trigger que actualice la misma tabla

te recomiendo leer esto:

https://stackoverflow.com/questions/...e-after-insert
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 22/09/2017, 01:02
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: trigger que actualice la misma tabla

Le doy la instrucción:
CREATE TRIGGER `tr_articulo_costo`
BEFORE UPDATE ON `art_costo`
FOR EACH ROW
BEGIN
SET old.ultimo_costo = new.costo;
END

Y me dice que no se permite la actualizacion de old row en el trigger

Si cambio el SET por
SET ultimo_costo = new.costo
Me dice que la variable ultimo costo es desconocida, aunque la entrecomille... Realmente no sé que está pasando :(

Gracias por la respuesta!
  #4 (permalink)  
Antiguo 22/09/2017, 07:28
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: trigger que actualice la misma tabla

No puedes hacer un trigger para actualizar la misma tabla
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 24/09/2017, 17:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: trigger que actualice la misma tabla

En realidad en el primer post estabas cerca, el tema es que lo que no puedes poner es una sentencia DML sobre la misma tabla, sino que debes operar sobre los mismos campos... con las pseudovariables.

Código SQL:
Ver original
  1. CREATE TRIGGER tr_actualiza_precio BEFORE UPDATE ON tabla_precio FOR EACH ROW
  2. BEGIN
  3. SET NEW.precio_ultimo = OLD.precio;
  4. END
__________________
¿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 25/09/2017, 09:44
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: trigger que actualice la misma tabla

Aunque finalmente lo hice a código, voy a orobar lo ke me dices gnzsoloyo.
Cómo que no se puede utilizar un trigger para actualizar la misma tabla si no vas a crear ningún bucle? Bueno, si no es posible me quedaré con el código.

Muchas gracias!!
  #7 (permalink)  
Antiguo 25/09/2017, 11:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: trigger que actualice la misma tabla

Cita:
Cómo que no se puede utilizar un trigger para actualizar la misma tabla si no vas a crear ningún bucle?
MySQL y María generan un bloqueo de tabla cuando se ejecuta el trigger precisamente para proteger la estabilidad de los procesos. Es tan simple como eso.
La idea es que no se puede permitir que se realicen operaciones DML sobre la propia tabla del trigger, porque estas operaciones podrían afectar el mismo registro sobre el que el proceso está operando, por ejemplo BORRANDOLO.
La metáfora sería que no puedes cortar la rama del arbol sobre el que estás parado...

¿Se entiende?

Si se permitiese eso, la tarea de BORRAR el registro se ejecutaría antes que la de UPDATE. En consecuencia ¿sobre qué registro se hace el UPDATE? ¿El que ya no existe? ¿Y cómo harías eso?

En otros DBMS el problema está resuelto con algoritmos que conservan el estado de la tabla para luego realizar una operación consistente.
Si quieres crear esa lógica por tu cuenta, siempre tienes la oportunidad de descargar el fuente de MySQL y crear esas rutinas. Todos los usuarios del mundo (y Oracle) estarán agradecidos...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 05/03/2018, 19:38
 
Fecha de Ingreso: agosto-2007
Mensajes: 7
Antigüedad: 17 años, 3 meses
Puntos: 0
Sonrisa Respuesta: trigger que actualice la misma tabla

Todos los usuarios del mundo (y Oracle) estarán agradecidos... jajaja.. bien !

Yo lo he resuelto con una tabla auxiliar que contiene el id y solo el dato que quiero actualizar, de esa forma al hacer el update, actualiza la otra tabla y esa es la que tiene el trigger de actualizar la tabla original. Se entiende ?

  #9 (permalink)  
Antiguo 06/03/2018, 10:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: trigger que actualice la misma tabla

Es una vuelta de tuerca. Básicamente clonas la info en otra tabla y realizas la operación. En ese caso estás trabajando en dos árboles diferentes.. No hay conflicto.
Esencialmente, es mas o menos la lógica de los DBMS que permiten ese tipo de acciones.

Buen trabajo.
__________________
¿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: 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 11:26.