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

Algun ejemplo sencillo de trigger?

Estas en el tema de Algun ejemplo sencillo de trigger? en el foro de Mysql en Foros del Web. bueno lo que pretendo es encriptar una contraseña con un trigger que se ejecute despues de que se almaceno. y con otro trigger desencriptar la ...
  #1 (permalink)  
Antiguo 30/08/2012, 08:43
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 12 años, 3 meses
Puntos: 52
Algun ejemplo sencillo de trigger?

bueno lo que pretendo es encriptar una contraseña con un trigger que se ejecute despues de que se almaceno.
y con otro trigger desencriptar la contraseña cuando sea solicitada.
como se hara eso?


Código SQL:
Ver original
  1. encriptar contraseña
  2. UPDATE contrasenas SET contrasena=AES_ENCRYPT('1','1') WHERE codigo=1;
  3.  
  4. desencriptar AES_DECRYPT
  5. SELECT AES_DECRYPT(contrasena,'1') FROM contrasenas WHERE codigo=1;
  6.  
  7. actualizar y desencriptar contraseña
  8. UPDATE contrasenas SET contrasena= AES_DECRYPT(contrasena,'1') WHERE codigo=1;

eso si funciona, pero como meto en un trigger? o como es?

los ejemplos que encuentro no los he podido aplicar, ponen ejemplos largos donde me pierdo. y como lo ocupo para unas horas mas me desespera.
de antemano gracias
uso mysql 5.0

Última edición por minombreesmm; 30/08/2012 a las 08:57
  #2 (permalink)  
Antiguo 30/08/2012, 09:05
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Algun ejemplo sencillo de trigger?

Hola minombreesmm:

Desde mi punto de vista, el ejemplo que se maneja en la documentación oficial es bastante sencillo, y te muestra perfectamente lo que puedes hacer con un TRIGGER...

http://dev.mysql.com/doc/refman/5.0/...e-trigger.html

Por qué no le das un vistazo y tratas de aplicarlo a lo que quieres hacer... si tienes problemas, postea la manera en que estás tratando de implementarlo y te decimos qué está mal.

Saludos
Leo.
  #3 (permalink)  
Antiguo 30/08/2012, 09:08
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 12 años, 3 meses
Puntos: 52
Respuesta: Algun ejemplo sencillo de trigger?

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola minombreesmm:

Desde mi punto de vista, el ejemplo que se maneja en la documentación oficial es bastante sencillo, y te muestra perfectamente lo que puedes hacer con un TRIGGER...

[url]http://dev.mysql.com/doc/refman/5.0/es/create-trigger.html[/url]

Por qué no le das un vistazo y tratas de aplicarlo a lo que quieres hacer... si tienes problemas, postea la manera en que estás tratando de implementarlo y te decimos qué está mal.

Saludos
Leo.

lo probe asi
Código SQL:
Ver original
  1. CREATE TRIGGER triger_contrasenas AFTER UPDATE ON contrasenas
  2.    FOR EACH ROW
  3.    INSERT INTO contrasenas(contrasena)
  4.    VALUES ('nueva');

tengo una tabla contrasenas con 2 campos
codigo
contrasena

y quiero para probar, solo que el triger me inserte despues de la aptualizacion un nuevo registro donde la contrasena fuera 'nueva'
ya posteriormente la encriptare si funciona eso.

pero lo que estoy probando no funciona. quisiera saber como borrarlo
cuando hago esto
Código SQL:
Ver original
  1. SELECT * FROM INFORMATION_SCHEMA.TRIGGERS;
me lo muestra. entonces no puedo crear de nuevo otro y para eso ocupo borrarlo entonces.
y no me permite.
  #4 (permalink)  
Antiguo 30/08/2012, 09:51
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: Algun ejemplo sencillo de trigger?

No puede enviar a realizar una operación DML contra la misma tabla que disparó el TRIGGER.
La tabla está bloqueada, por tanto no es accesible para INSERT/UPDATE/DELETE.

Me explico un poquito mejor:
Cuando un TRIGGER se dispara, la tabla que lo dispara se bloquea para escritura, por lo que no se puede hacer una operación de INSERT/UPDATE/DELETE sobre ella.
Si se pudiere hacer, podrías tener un loop infinito si la operación que realizas es del mismo tipo de la que disparó el trigger, por lo que dispararía otra vez el trigger, que haría la misma operación, la cual dispararía el trigger,.... y así hasta el infinito (no es cierto, sería mientras hay memoria RAM disponible para subprocesos).
¿Se entiende el por qué de la limitación?
El hecho de que la operación DML indicada sea diferente a la que lo disparó, es irrelevante, porque el algoritmo programado en MySLQ debe resolver el peor escenario, y por tanto lo bloqueará de todos modos.

Tampoco puedes acceder a los datos que están entrando o a los viejos llamándolos por su nombre de columna, porque el nombre de la columna no existe en el contexto de un TRIGGER. Lo asumiría como nombre de tabla o de variable no declarada.
Para poder acceder a esos valores existen las pseudovariables NEW y OLD, las cuales son algo así como punteros a un registro entrante y al registro a borrar o actualizar, en otro caso.
Por otro lado, tienes que tener en cuenta que un TRIGGER en MySQL es de ejecución obligatoria, por lo que la única forma de interrumpirlo es forzando un error, lo que es una mala práctica a la larga.
Otra cosa que los TRIGGERs no pueden hacer es llamar a SP o SF, por lo que no puedes usarlo para sortear la limitación, y tampoco puedes realizar procesos recursivos...

Un detalle más: Para lo que quieres hacer, los TRIGGER son una mala idea.
Hay otras formas de llegar a tu solución y que son mejores prácticas, INCLUYENDO el realizar una consulta previa al INSERT o UPDATE...
__________________
¿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; 30/08/2012 a las 10:13
  #5 (permalink)  
Antiguo 30/08/2012, 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: Algun ejemplo sencillo de trigger?

Cita:
pero lo que estoy probando no funciona. quisiera saber como borrarlo
cuando hago esto
Para eliminar un trigger nbo se borra la tabla.
Un TRIGGER es un objeto de BBDD y los objetos de ese tipo sólo se borran con DROP.
Como las tablas:
Código MySQL:
Ver original
  1. DROP TABLE tabla;
  2. DROP VIEW vista;
  3. DROP INDEX indicex;
__________________
¿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: contraseñas, encryptar, 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 08:56.