transaction start example mysql transactions innodb

start - rollback mysql



MySQL 5.5: ¿Obtener la ID de transacción actual? (2)

¿Es posible con MySQL 5.5 obtener la identificación de la transacción actual? Algo como...

BEGIN; SELECT CURRENT_XID(); -- foo ... SELECT CURRENT_XID(); -- also foo ROLLBACK; SELECT CURRENT_XID(); -- NOT foo

El valor real no es importante, siempre que pueda obtener algún identificador único que siempre devolverá el mismo valor en la misma transacción.


Aquí hay una mala solución:

CREATE FUNCTION CURRENT_XID() RETURNS VARCHAR(18) BEGIN RETURN (SELECT TRX_ID FROM INFORMATION_SCHEMA.INNODB_TRX WHERE TRX_MYSQL_THREAD_ID = CONNECTION_ID()); END

  1. Devuelve NULL si solo realiza operaciones de solo lectura dentro de una transacción.
  2. Lo más importante es que INNODB_TRX no está sincronizado con las transacciones. Entonces, si llamas a CURRENT_XID() inmediatamente después de finalizar la transacción, obtendrás un valor atrás, pero luego esperarás un segundo y lo ejecutarás y obtendrás NULL .