Постараюсь сделать это как можно проще. Я использую 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
}
Надеюсь, я не упростил код. Любая помощь будет оценена по достоинству.