MySQL 5.5可以获取当前的事务ID吗?类似...MySQL 5.5:获取当前的事务ID?
BEGIN;
SELECT CURRENT_XID(); -- foo
...
SELECT CURRENT_XID(); -- also foo
ROLLBACK;
SELECT CURRENT_XID(); -- NOT foo
实际值并不重要,只要我可以获得某个唯一标识符,该标识符将始终在整个同一事务中返回相同的值。
MySQL 5.5可以获取当前的事务ID吗?类似...MySQL 5.5:获取当前的事务ID?
BEGIN;
SELECT CURRENT_XID(); -- foo
...
SELECT CURRENT_XID(); -- also foo
ROLLBACK;
SELECT CURRENT_XID(); -- NOT foo
实际值并不重要,只要我可以获得某个唯一标识符,该标识符将始终在整个同一事务中返回相同的值。
有甘德在http://dev.mysql.com/doc/refman/5.5/en/innodb-trx-table.html
有没有简单的函数返回的信息,但你可以在该表发出特殊查询找,获取TRANSACTION_ID
这里是一个坏的解决方案:
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
NULL
如果你只是做只读操作的事务内。INNODB_TRX
不与事务同步。因此,如果您在交易结束后立即致电CURRENT_XID()
,您将获得一笔价值回报,但稍后等待一秒钟,然后运行它,您将获得NULL
。感谢您的信息。在这个表更新之前,有没有办法让mysql“阻塞”? (我正在做这个编程,并希望不只是做一个time.sleep()。请参阅http://stackoverflow.com/questions/34303079/how-do-i-determine-if-i-have-uncommitted-writes -in-a-mysql-transaction – UsAaR33 2015-12-16 08:16:14
您是否试图在不中断数据库的情况下检查是否有未完成的事务,或者您希望将数据库在短时间内置于只读状态? – 2015-12-17 00:59:54
前者(检查未完成的事务) – UsAaR33 2015-12-17 07:51:11
'SELECT count(*)FROM INFORMATION_SCHEMA.INNODB_TRX' returns'0' – 2014-10-29 01:09:53
当事务使用非只读SQL命令时,似乎该事务只在'INNODB_TRX'中注册。有点讨厌,但这应该工作... – 2014-10-29 01:13:49
你是否首先开始交易? – winmutt 2014-10-29 01:13:53