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
- Devuelve
NULL
si solo realiza operaciones de solo lectura dentro de una transacción. - Lo más importante es que
INNODB_TRX
no está sincronizado con las transacciones. Entonces, si llamas aCURRENT_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ásNULL
.
Eche un vistazo a http://dev.mysql.com/doc/refman/5.5/en/innodb-trx-table.html
No hay una función simple para devolver esa información, pero podría emitir una consulta especial buscarla en esa tabla y obtener el transaction_id