Итак, я унаследовал большую базу кода на С ++, которая выполняет большую часть работы с MySQL. Код всегда отключает автокоммит и, как правило, имеет функции, которые выглядят следующим образом:
int function() {
if(mysql_real_query(conn, ...)) {
return -1;
}
if(mysql_real_query(conn, ...)) {
return -1;
}
mysql_commit(conn);
return 0;
}
Очевидно, здесь подразумевается, что фиксация происходит только в том случае, если запросы успешны. Но что произойдет, если один из них нет? В конце концов, соединение mysql правильно закрыто, но в коде нет отката.
Так что, когда он закроется, он просто внесет какие-либо изменения, которые были успешными? Или будет откат, как будто ничего не случилось?
Моя интуиция говорит, что имеет смысл иметь откат, если второй запрос не выполнен, чтобы "отменить" успешный первый запрос. Таким образом, эта функция оказывается транзакционной.
Конечно, я считаю, что этот код по своей сути нарушен, потому что позже другой код mysql может выполнить коммит, оставив вещи в "странном" состоянии, если какая-то предыдущая работа не удалась. Но прежде чем перейти к изменению поведения программы, я хотел убедиться, что я понимаю, каково текущее поведение.