MYSQL Autocommit при использовании нескольких функций

Постараюсь сделать это как можно проще. Я использую throw/catch со своими функциями. Функция принимает имя, описание и массив пользователей. Он добавляет имя и описание в одну таблицу, затем берет массив пользователей и выполняет отдельную функцию для добавления их в таблицу коннекторов. Я настроил функцию на отключение автоматической фиксации до тех пор, пока не будет введен последний пользователь, а затем выполнить фиксацию. Проблема в том, что если одному из пользователей не удается войти (из-за ограничения внешнего ключа), транзакция не отменяется. Тот факт, что я вызываю отдельную функцию, «сбрасывает» автофиксацию и приводит к тому, что она не работает должным образом? Я делаю это неправильно, помещая откат в предложение Catch?

try
{
    autocommit=0
    run insert query
    if query fails: throw error, rollback
    else
      for count of array
        run another function (this function does more SQL and throws its own errors if it fails)

    autocommit=1
}

catch
{
    rollback, autocommit=1;
    display error
}

Надеюсь, я не упростил код. Любая помощь будет оценена по достоинству.


person Ender28    schedule 18.12.2012    source источник
comment
Обновление: перемещая код, который запускает другая функция, в основную функцию, он работает. По этой логике... вызов другой функции сбрасывает автофиксацию?   -  person Ender28    schedule 19.12.2012


Ответы (1)


person    schedule
comment
Это в основном то, что я делаю. Разница в том, что в операторе try у меня есть вызов другой функции, которая выполняет больше SQL. Эта функция выдаст свою собственную ошибку, когда произойдет сбой. Эта функция будет вызываться несколько раз в операторе try. Если один из этих вызовов завершится ошибкой, я хочу, чтобы вся транзакция была отменена, а это не так. Я бросил две рассматриваемые функции на сайт вставки. Возможно, это пояснит дальше: pastie.org/5553135 - person Ender28; 19.12.2012