Hola Como puedo crear un trigger cada vez que se modifique un campo en la tabla articulos y que me diga que usuario lo hizo, gracias.
Y por ultimo esto en donde queda guardado ? soy nuevo con esto de los triggers
| |||
Como crear triggers Hola Como puedo crear un trigger cada vez que se modifique un campo en la tabla articulos y que me diga que usuario lo hizo, gracias. Y por ultimo esto en donde queda guardado ? soy nuevo con esto de los triggers |
| ||||
Respuesta: Como crear triggers Los TRIGGERS no producen salida de datos. En ese sentido no pueden devolverte datos por sí mismos, aunque si se pueden usar variables de usuario para obtener algún retorno. En cuanto a lo de los usuarios, la unica información de usuarios que puede aportar es del usuario dueño de la conexión a MySQL. Si los usuarios los administras independientemente, es decir que en tu base tienes una tabla "usuarios", eso no se puede saber por medio de MySQL, si no estan registrados en el MySQL mismo. ¿Se entiende? Los TRIGGERs se almacenan en una tabla específica de la base information_schema, y también en archivos .TRG en la base donde está la tabla a la cual el TRIGGER pertenece. Consejo: Procura leer un poco más sobre el tema antes de meterte a trabajar con ellos. COmo mínimo, lee el tema en Wikipedia: Trigger (base de datos)
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
Respuesta: Como crear triggers Cita: Tengo lo siguiente buscando en la red
Iniciado por gnzsoloyo Los TRIGGERS no producen salida de datos. En ese sentido no pueden devolverte datos por sí mismos, aunque si se pueden usar variables de usuario para obtener algún retorno. En cuanto a lo de los usuarios, la unica información de usuarios que puede aportar es del usuario dueño de la conexión a MySQL. Si los usuarios los administras independientemente, es decir que en tu base tienes una tabla "usuarios", eso no se puede saber por medio de MySQL, si no estan registrados en el MySQL mismo. ¿Se entiende? Los TRIGGERs se almacenan en una tabla específica de la base information_schema, y también en archivos .TRG en la base donde está la tabla a la cual el TRIGGER pertenece. Consejo: Procura leer un poco más sobre el tema antes de meterte a trabajar con ellos. COmo mínimo, lee el tema en Wikipedia: Trigger (base de datos)
Código:
y hace en cierta parte lo que necesito pero como hago si quiero que me guarde el usuario "administrador" osea con el cual me logueo y no el que me guarda que me dice "root@localhost" y que me guarde el valor anterior y el nuevo, ya que me guarda el valor antiguo CREATE TRIGGER trigger_auditoria_clientes AFTER UPDATE ON activo FOR EACH ROW INSERT INTO auditoria(serialemp, descripcion, usuario, modificado ) VALUES (OLD.serialemp, OLD.descripcion, CURRENT_USER(), NOW() ); |
| ||||
Respuesta: Como crear triggers ¿Leíste bien lo que te puse? Cita: El tema es simple: La conexión que usas le pertenece al root (muy mal hecho por cierto, ese usuario no se debe utilizar si no es para tareas administrativas). Es con el username root con el que abres la conexión, y para MySQL ese es el único usuario que está. Los usuarios que administres en tu base por programación, no existen para MySQL. Sólo existen para tu aplicación.Si los usuarios los administras independientemente, es decir que en tu base tienes una tabla "usuarios", eso no se puede saber por medio de MySQL, si no estan registrados en el MySQL mismo. ¿Se comprende la diferencia? La única solución que yo le veo q lo que quieres hacer es, apenas abres la conexión, cargar una variable de usuario con el nombre del usuario que se loguea en tu programa:
Código MySQL:
y recién entonces hacer el insert que dispare el trigger. Ver original Pero el trigger debería tener esta sintaxis: Como las variables de usuario existen sólo en la conexión donde se usan, y mientras la conexión no se cierre, no te traerán problemas ni con la memoria, ni con otros usuarios (dos conexiones diferentes del mismo usuario pueden utilizar el mismo nombre de variable y diferente contenido sin que se generen conflictos).
__________________ ¿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; 11/07/2011 a las 18:40 |
| |||
Respuesta: Como crear triggers Cita: Es que el root lo estoy utilizando desde otro pc que no administro yo, pero te pregunto ese "SET" como y donde lo podria declarar ? es que a veces no me ejecutan unas consultar segun donde lo coloque gracias
Iniciado por gnzsoloyo ¿Leíste bien lo que te puse? El tema es simple: La conexión que usas le pertenece al root (muy mal hecho por cierto, ese usuario no se debe utilizar si no es para tareas administrativas). Es con el username root con el que abres la conexión, y para MySQL ese es el único usuario que está. Los usuarios que administres en tu base por programación, no existen para MySQL. Sólo existen para tu aplicación. ¿Se comprende la diferencia? La única solución que yo le veo q lo que quieres hacer es, apenas abres la conexión, cargar una variable de usuario con el nombre del usuario que se loguea en tu programa:
Código MySQL:
y recién entonces hacer el insert que dispare el trigger. Ver original Pero el trigger debería tener esta sintaxis: Como las variables de usuario existen sólo en la conexión donde se usan, y mientras la conexión no se cierre, no te traerán problemas ni con la memoria, ni con otros usuarios (dos conexiones diferentes del mismo usuario pueden utilizar el mismo nombre de variable y diferente contenido sin que se generen conflictos). |
| |||
Respuesta: Como crear triggers Cita: Vale cuando me dices a nivel MYSQL me dices que lo cree dentro de mysql mas no php ? dime como haria para crear ese "SET", para lo de la consulta que hablo es la siguiente
Iniciado por gnzsoloyo Esa primera consulta se debe enviar antes del UPDATE que dispara el trigger, o bien luego de abrir la conexión. Como te expliqué claramente, el único sentido es el de crear una variable de usuario dentro del MySQL, que luego pueda usarse para almacenar ese dato, que no pertenece ni se puede obtener por una consulta de MySQL. Ten en cuenta que yo no tengo ni idea de qué estás haciendo, cómo lo estás programando o qué estás usando para probar las consultas, por cuanto no has comentado sobre esos temas absolutamente nada. Simplemente te estoy dando pautas a nivel de MySQL. Trata de dar información más concreta, o de lo contrario no podemos saber por qué hay consultas que no te funcionan, ni si lo estás haciendo o no correctamente. Código PHP: |
| ||||
Respuesta: Como crear triggers Mmmm... Necesitas leer un poco más de SQL , estás confundiendo la sintaxis de UPDATE con la de INSERT, y las funciones que necesitas (NOW() devuelve un DateTime, y tu tienes el par de datos en dos campos distintos).
Código MySQL:
Ver original El SET al que te refieres no es el SET del UPDATE. En ese caso es una cláusula del UPDATE, mientras que cuando se ejecuta directamente es una sentencia de asignación de una valor en una variable.
Código MySQL:
Ver original
__________________ ¿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; 11/07/2011 a las 20:42 |
| |||
Respuesta: Como crear triggers Cita: Vale gracias por la aclaracion ahora te pregunto, dentro de un archivo.php no importa donde valla ubicada la consulta o la actualizacion de lo que se valla a realizar ? o debe estar en algun orden ? y si yo quisiera que en vez de ese
Iniciado por gnzsoloyo Mmmm... Necesitas leer un poco más de SQL , estás confundiendo la sintaxis de UPDATE con la de INSERT, y las funciones que necesitas (NOW() devuelve un DateTime, y tu tienes el par de datos en dos campos distintos).
Código MySQL:
Ver original El SET al que te refieres no es el SET del UPDATE. En ese caso es una cláusula del UPDATE, mientras que cuando se ejecuta directamente es una sentencia de asignación de una valor en una variable.
Código MySQL:
Ver original
Código MySQL:
FUERA UN Ver original
Código MySQL:
como lo podria hacer, estube leyendo y ese SET dice que se declara dentro del MYSQL Ver original |
| ||||
Respuesta: Como crear triggers Te aclaro los detalles: 1) Yo sólo te estoy diciendo cómo se crea una variable de usuario en MySQL, no qué quieres cargar en ella. Eso es tu decisión. Si quieres poner una letra, una cadena, un número, para el caso es igual y dependerá de lo que necesites poner en esa variable. 2) Las variables de usuario no se declaran, se inicializan. Se pueden usar sin inicializar, pero entonces su valor es NULL, por eso se debe asignar un valor antes de usarlas, aunque más no sea para definir el tipo de datos que manejarán. Sólo se declaran las variables locales de los stored procedures, functions y triggers, pero esas no llevan "@" y no se pueden usar fuera de esas rutinas. 3) Si vas a usar el valor, como en cualquier lenguaje, debes cargar la variable antes, de lo contrario el valor no existirá. En dónde lo pongas en tu script PHP dependerá de tí. Yo te sugerí dos opciones prácticas, el resto dependerá de la lógica de tu programación. Por eso mi sugerencia es hacerlo después de abrir la conexión. 4) Ten en cuenta que las variables de usuario dependen del subproceso de conexión, mueren al cerrarse la misma. Mientras tanto conservan el valor que se les asigne la última vez (esto permite hacer consultas con un grado de dinamismo notable). 5) SET, dentro de otras sentencias es cláusula, fuera de toda sentencia es sentencia porque los contextos son distintos, y como tal se usa en los scripts de PHP: como otra sentencia más de SQL, pero sólo para las variables de usuario. Si quieres ver algunos usos de las variables de usuario, lee las FAQs de MySQL: ¿Cómo numerar secuencialmente una consulta, sin usar PK?
__________________ ¿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; 12/07/2011 a las 06:15 |
| |||
Respuesta: Como crear triggers Cita: Mira tengo este codigo
Iniciado por gnzsoloyo Te aclaro los detalles: 1) Yo sólo te estoy diciendo cómo se crea una variable de usuario en MySQL, no qué quieres cargar en ella. Eso es tu decisión. Si quieres poner una letra, una cadena, un número, para el caso es igual y dependerá de lo que necesites poner en esa variable. 2) Las variables de usuario no se declaran, se inicializan. Se pueden usar sin inicializar, pero entonces su valor es NULL, por eso se debe asignar un valor antes de usarlas, aunque más no sea para definir el tipo de datos que manejarán. Sólo se declaran las variables locales de los stored procedures, functions y triggers, pero esas no llevan "@" y no se pueden usar fuera de esas rutinas. 3) Si vas a usar el valor, como en cualquier lenguaje, debes cargar la variable antes, de lo contrario el valor no existirá. En dónde lo pongas en tu script PHP dependerá de tí. Yo te sugerí dos opciones prácticas, el resto dependerá de la lógica de tu programación. Por eso mi sugerencia es hacerlo después de abrir la conexión. 4) Ten en cuenta que las variables de usuario dependen del subproceso de conexión, mueren al cerrarse la misma. Mientras tanto conservan el valor que se les asigne la última vez (esto permite hacer consultas con un grado de dinamismo notable). 5) SET, dentro de otras sentencias es cláusula, fuera de toda sentencia es sentencia porque los contextos son distintos, y como tal se usa en los scripts de PHP: como otra sentencia más de SQL, pero sólo para las variables de usuario. Si quieres ver algunos usos de las variables de usuario, lee las FAQs de MySQL: ¿Cómo numerar secuencialmente una consulta, sin usar PK? Código PHP: |
| ||||
Respuesta: Como crear triggers Tengo la impresión de que estás complicándolo innecesariamente. Esto devuelve un sólo valor:
Código MySQL:
Entonces esto debería devolver un sólo registro, si id_requisicion es único: Ver original
Código MySQL:
En ese caso, esto sería redundante:Ver original
Código MySQL:
Porque agrupar sobre una consulta que devuelve un sólo registro, es verdaderamente redundante.Ver original En ese caso, el resto de los campos son innecesarios, así que esto:
Código MySQL:
por lo que bien podría escribirse así: Ver original
Código MySQL:
Y el resultado debería ser el mismo.Ver original Mi duda es que no termino de comprender qué es lo que estás buscando, porque agrupar por descripción y por cantidad, cuando estás buscando el id_requisición, no parece muy razonable. ¿Podrías explicar un poco mejor qué es lo que buscas y qué es lo que quieres actualizar. Lo que si me parece dudoso es que el campo que relacione la tabla ACTIVO con FACTURAS2 sea descripcion. Un campo de texto no me parece una buena idea como FK.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
Respuesta: Como crear triggers GNZSLOYO no se porque colocas eso, antes de este mensaje, lo que busco es guardar el usuario en el triggers Código PHP: |
Etiquetas: |