2011-08-28 10 views
6

Me preguntaba si existe algo similar a una función de devolución de llamada usando mysql después de un INSERTAR o ACTUALIZAR que podría devolverme el número de fila y quizás los valores de dichas filas.devolución de llamada MySQL - ¿existe tal cosa?

+3

cómo y dónde se necesita estos valores a ser devuelto? –

+0

¿Está intentando [simular la cláusula 'OUTPUT'] (http://stackoverflow.com/q/5817414/73226)? –

+0

vea esto también: http://stackoverflow.com/questions/933565/get-auto-increment-value-with-mysql-query –

Respuesta

4

No conozco ninguna devolución de llamada como dice, pero seguramente desde su aplicación de llamada puede recuperar la última ID insertada en caso de que no la haya especificado y la base de datos haya generado un valor de incremento automático. Otros valores que ya deberías saber porque los has insertado.

si necesita conocer esos valores dentro del servidor de base de datos, puede tener un desencadenador SQL que se ejecuta en cada inserción para que pueda hacer más procesamiento en el registro recién insertado, por ejemplo, escriba algo en otra tabla, etc.

+0

¿cómo puedo obtener esa última identificación? porque una consulta de inserción no devuelve (hasta donde yo sé) un valor además de éxito o error. –

+0

http://stackoverflow.com/questions/933565/get-auto-increment-value-with-mysql-query –

+1

@Itai Sagi llame a [last_indert_id())] (http://dev.mysql.com/doc/ refman/5.5/es/information-functions.html # function_last-insert-id) –

7

Puede crear triggers a los que se les solicite insertar y actualizar. No devuelven valor, pero pueden establecer variables que puede leer fuera de ellos.

+0

¡Gracias! Llegué aquí buscando la "devolución de llamada de MySQL" en Google para encontrar el término "activador", como estoy seguro de que muchos otros lo han hecho. – maurice

2

Esto no está disponible en MySQL tal como está. Creo que hay dos métodos para lograr esto:

  1. Tendría que simularlo con sondeo, un método bastante feo, fácil de programar pero difícil para el servidor.

  2. Ver Does MySQL permit callbacks in C such that when a change happens, I can be notified? - escribir una función definida por el usuario que podría notificar a un oyente registrado utilizando algún método patentado de su diseño. Más duro en el programador, fácil en el servidor. En este caso, asegúrese de que su UDF sea robusta, no se congele mientras pasa una notificación a un oyente que pudo haber fallecido, etc.
Esta sería una práctica UDF genérica para MySQL y traería algo que siempre le ha faltado en comparación a Firebird/Interbase, que llaman eventos, que no deben confundirse con los eventos temporizados de MySQL. La característica del evento cronometrado de MySQL por otro lado es algo que Firebird & Interbase careció la última vez que los miré.

Ver esto para una descripción de un evento pájaro de fuego en caso de que (o algún lector más adelante) decide hacerlo a través de UDF - que es una buena especificación de diseño para apuntar a: http://www.janus-software.com/fbmanual/manual.php?book=php&topic=49

Cuestiones relacionadas