Как использовать один и тот же XID в двух сеансах в MySQL? - PullRequest
0 голосов
/ 26 октября 2018

У меня есть два API-интерфейса restful: одно имя заказа на обновление и другое состояние заказа на обновление, и они используют ту же базу данных mysql и ту же таблицу под названием «Заказ».

И в своем клиентском коде я хочу вызвать эти два API с помощью транзакции, но обнаружил, что не могу контролировать один xid в двух сеансах mysql.

А мой дизайн такой:

код клиента:

api.xa_start(xid);
if (api.updateName('111') && api.updateStatus(1)) {
    api.xa_commit(xid);
} else {
    api.xa_rollback(xid);
}

код API (который находится на другом сервере):

function xa_start(xid) {
    pdo.execute('xa start xid');
}

function xa_commit(xid) {
    pdo.execute('xa commit xid');
}

function xa_rollback(xid) {
    pdo.execute('xa rollback xid');
}

function updateName(name) {
     pdo.execute('update order set name="'+name+'" where id=xx');
}

function updatestatus(status) {
     pdo.execute('update order set status="'+status+'" where id=xx');
}

Но проблема в том, что MySQL кажется, что не может использовать один и тот же XID в двух сеансах ... Так, как я могу решить эту проблему ...

...