2014-10-29 2 views
0

Возможно ли с MySQL 5.5 получить текущий идентификатор транзакции? Что-то вроде ...MySQL 5.5: Получение текущего идентификатора транзакции?

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

SELECT CURRENT_XID(); -- NOT foo 

Фактическое значение не имеет значения, до тех пор, как я могу получить уникальный идентификатор, который всегда будет возвращать одинаковое значение в течение одной и той же сделки.

ответ

2

У глупца в http://dev.mysql.com/doc/refman/5.5/en/innodb-trx-table.html

Там нет простой функции, чтобы вернуть эту информацию, но вы могли бы выдает специальный вид запроса для него в этой таблице и принести TRANSACTION_ID

+0

'SELECT COUNT (*) FROM INFORMATION_SCHEMA.INNODB_TRX' возвращает '0' –

+1

Похоже, что сделка регистрируется только в' INNODB_TRX', когда транзакция с использованием не только для чтения команд SQL. Бит раздражает, но это должно сработать ... –

+0

Вы сначала начали транзакцию? – winmutt

1

Вот плохое решение:

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. Возвращает NULL, если ваши только Doing читать только операции внутри транзакции.
  2. Самое главное, что INNODB_TRX не синхронизирован с транзакциями. Поэтому, если вы вызываете CURRENT_XID() сразу после окончания транзакции, вы получите значение обратно, но затем подождите секунду и запустите его, и вы получите NULL.
+0

Спасибо за информацию. Есть ли способ в mysql «блокировать», пока эта таблица не будет обновлена? (Я делаю это progrmatically и хочу не просто делать time.sleep(). См. Http://stackoverflow.com/questions/34303079/how-do-i-deetermine-if-i-have-uncommitted-writes -in-a-mysql-transaction – UsAaR33

+0

Вы пытаетесь проверить, существуют ли незавершенные транзакции без прерывания базы данных или вы хотите временно перевести базу данных в состояние readonly? –

+0

Первый (проверьте, не были ли выполнены транзакции) – UsAaR33

Смежные вопросы