Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Bhrentox en 24 Mayo 2011, 22:27 pm



Título: Triggers en Mysql
Publicado por: Bhrentox en 24 Mayo 2011, 22:27 pm
Hola, veran tengo un problema con los llamados Triggers en mysql lo que tengo que hacer es esto:

Crear un trigger que cuente los registros de la tabla employees y mantenga ese numero actualizado en una tabla llamada cuenta, este trigger actuara después de una instrucción insert o delete ejemplo si se introduce un registro nuevo en la tabla aumentara en uno el contador, si se elimina un registro se disminuirá en uno el contador.

Estaba pensando en si se pueden hacer condiciones  anidadas en un solo trigger o alguien que sepa de esto alguna sugerencia??

Bueno ya encontre que si se pueden realizar condiciones anidadas ahora el problema es ese llamado contador como hacer que me cuente los registros de la tabla que ya tengo y que despues se vaya aumentando o disminuyendo segun sea el caso.

Salu2 y les agradezco de antemano.


Título: Re: Triggers en Mysql
Publicado por: Valkyr en 25 Mayo 2011, 03:42 am
Pues antes de crear el trigger creas la tabla cuenta, almacenas en ella el valor de contar todos los registros con un COUNT(), luego a la hora de definir el trigger si es una inserccion aumentas en uno dicho valor, si es un delete decrementas en uno. Esa es la idea de una forma así general, ahora sería cuestión de implementarlo.

Saludos.


Título: Re: Triggers en Mysql
Publicado por: KuraraGNU en 25 Mayo 2011, 11:03 am

1. Si, se pueden anidar.

2. Como dice Bhrentox, creas la tabla cuenta primero con el count(). Despues, no hagas que automaticamente sume o reste dependiendo si se hace un insert o un delete, sino si la insercion o la supresion de una fila se ha llevado a cabo de forma correcta.

No recuerdo bien como van los triggers, soy de memoria volatil, asi que no te puedo ayudar ahora mismo en los pasos que sigue un trigger. Se que crea una tabla temporal y si ocurre lo que debe ocurrir, se pasan esos datos a la tabla (en el caso de insercion) y el delete no recuerdo. Si quieres lo busco y te lo digo, si ya sabes tu como funciona perfecto.


Título: Re: Triggers en Mysql
Publicado por: Bhrentox en 27 Mayo 2011, 14:11 pm
Muchas gracias ya pude crear el trigger de esta manera

mysql> DELIMITER ||
mysql> create trigger eje_b after insert on employees2
    -> for each row
    -> begin
    -> insert into cuenta set dato=(select count(*) from employees2);
    -> END;
    -> ||
Query OK, 0 rows affected (0.01 sec)

el problema ahora esque cada vez que se ingresa un nuevo registro en la tabla de cuenta se pone una cantidad nueva es decir

primero tenia asi:

dato
23
y ahora ya va asi
dato
23
22
25
26

hay alguna forma de evitar que se acumulen y que solo ponga el dato actual segun yo debo hacer un update pero no se como realizar la sentencia espero alguien sepa salu2 y gracias por su ayuda.



Título: Re: Triggers en Mysql
Publicado por: Bhrentox en 28 Mayo 2011, 03:05 am
Bueno pues ya resolvi el problema
la solucion es esta por si despues alguien la necesita

mysql> DELIMITER ||
mysql> create trigger eje_b after insert on employees2
    -> for each row
    -> begin
    -> insert into cuenta set dato=(select count(*) from employees2);
    -> END;
    -> ||
Query OK, 0 rows affected (0.01 sec)
En donde va esta linea simplemente se le cambia a update y listo todo resuelto

-> insert into cuenta set dato=(select count(*) from employees2);
Solucion:
-> update cuenta set dato=(select count(*) from employees2);

Gracias Valkyr y KuraraGNU