Triggers en MySQL

NeB1

hola buenas,

Resulta que estoy un poco verde en MySQL, solo se gastar lo típico, y a la hora de hacer cualquier cosa un poco más complicada me veo forzado a hacer usos de scripts. Ahora me veo obligado a hacer cosas que no se hacer, estas la cuestión:

supongamos que tengo una tabla royo...

CREATE TABLE datos
(
id int not null auto_increment,
nombre varchar(100),
valor int(11),
primary key(id)
) ENGINE = InnoDB;

y otra:

CREATE TABLE resultados
(
id int not null auto_increment,
nombre varchar(100),
resultado int(11),
primary key(id)
) ENGINE = InnoDB;

y quiero crear un trigger para que cada vez que se modifique la tabla datos, se inserte un valor, por ejemplo (aunque sea una estupidez en este ejemplo) que me guarde el dato valor de la primera tabla en resultado de la segunda.

se que es algo así:

CREATE TRIGGER trigger_resultados AFTER UPDATE ON datos
FOR EACH ROW
BEGIN
INSERT INTO resultados(id, nombre, resultado)
VALUES (OLD.id, OLD.nombre, <¡¡AQUINOSEMETERLOQUEQUIEROPORQUEPERTENECEAOTRATABLA!>);
END;

alguien me lo soluciona? os estaría muy agradecido

erdanblo

¿OLD es una palabra reservada?

No es "tabla.Campo"?

l31m

si pones OLD.valor no te funciona? u_U

NeB1

el Old ese es pa que coja el valor antiguo de ese campo, eso no era problema, la cuestion era coger el dato de otra tabla, pero ahora que me lo ha dicho, tengoq ue probar lo de "TABLA.CAMPO" que si que puede ser así. THX.

otra cosa, y si quiero que el trigger salte cuando se actualize, inserte, se modifique, etc.? tengo que hacer un trigger para cada situación?

G3Lo

Si quieres que te valga para los 3 casos tienes que poner las 3 condiciones al principio, es decir:

AFTER INSERT OR DELETE OR UPDATE ON .....

Lo que nose fijo es si una vez dentro del cuerpo tienes que poner los 3 casos, aunque si haces lo mismo en los 3 creo que no

Riu

#5 si pones eso en el trigger me parece recordar que en el cuerpo debia hacer la misma accion, si por ejemplo querias hacer otra cosa debias crear otro disparador aunque no estoy seguro y tengo dudas ahora...
si quieres que te coja el valor que haces en la ultima inserción yo haria esto, crearia una variable local del tipo que tiene el de la tabla que quieres obtener llamado en mi caso
create trigger resultado when update or deleting or inserting on tabla {
resul int(11)
result:=(select campo from tabla order by y que coja el mayor.)
ahora meteria en el insert de la tabla que tenias con los resultados
insert tabla(campo1,campo2,...ect) VALUES (OLD.ID,OLD,NEW.RESULT);
end trigger;

}
el codigo y la sintaxis no se si es la correcta pero la idea es la ke creo que necesitas.

NeB1

wowowowowow thanks, me ha ayudado de muchisimo

Usuarios habituales

  • NeB1
  • Riu
  • G3Lo
  • l31m
  • erdanblo