Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Транзакции в MySQL

279
06 декабря 2008 года
bave
456 / / 07.03.2004
Вообщем есть проблемы с транзакциями - они тупо не работают.
Подробнее:
СУБД MySQL
Все таблицы InnoDB.

Внутри ХП-шки выполняется примерно следующий запрос
(выкладываю только код, который актуален для этого вопроса):


Код:
sp:begin

start transaction

select <...> into <...> from ...

  if @error_count > 0 then
    rollback;
    leave sp;
  end if;

replace into Host ...

  if @error_count > 0 then
    rollback;
    leave sp;
  end if;

update Account set ...

  if @error_count > 0 then
    rollback;
    leave sp;
  end if;

commit;

select ...

end $$


Проблемы следующие:

1. Если что-то падает в запросе rollback нефига не выполняется - вернее вообще не выполняется вот этот блок:
if @error_count > 0 then
rollback;
leave sp;
end if;

2. Если ничего не падает, каого-то фига не выполняется select коорый после commit-а.
Вот это даже пожалуй больше даже беспокоит... - т.е. с чего вдруг не выполняется то что соит после commit-а ?
1
06 декабря 2008 года
kot_
7.3K / / 20.01.2000
Во первых не понятно назначение ифов между операциями - зачем тогда надо запускать транзакцию, если вы сами пытаетесь отработать ошибки? Транзакция по определению является атомарной - т.е. если операция неуспешна - откат будет для всех предыдущих операций.
Во вторых - попробуйте вместо start transaction указать begin;
279
06 декабря 2008 года
bave
456 / / 07.03.2004
1. Так это я не от хорошей жизни добавил то... сначало увидел что не откатываются операции, попробовал добавить ролбаки сам... - не помогло...
т.е. например в последнем апдейте обновляются поля одно из которых unique - специально создаю такую ситацию при которой в него пытается записаться значение кторое уже есть в базе - так вот апдейт отваливается, а изменения произошедшие в предидущем реплейсе остаются...
2. А begin вроде в MySQL-е не катит - один фиг автокоммит после каждой операции...
-------------------------
И всё таки не понятна судьба последнего селекта, кторый после коммита - ХП-шка отрабатывает как будто его вообще нет...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог