Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Не работают транзакции (Сергей) 07/04/2011 - 20:47:52
      Re: Не работают транзакции (Akina) 07/04/2011 - 22:41:06
      Re: Не работают транзакции (Сергей) 08/04/2011 - 01:32:55
      Re: Не работают транзакции (Сергей) 08/04/2011 - 01:34:38
      Re: Не работают транзакции (Сергей) 08/04/2011 - 12:40:33
      Re: Не работают транзакции (Akina) 08/04/2011 - 14:33:57

> Original message text:
> From: Сергей - 07/04/2011 - 20:47:52
> Subject:Не работают транзакции
> -----------------
> Добрый день. Помогите пожалуйста решить проблему.
>
> На моем mysql сервере на работают транзакции, а именно:
> в блоке
> start transaction;
> commit;
> запускаю два запроса, первый выполняется, на втором происходит
> ошибка (запись с таким ключом уже есть), по идее первое изменение
> таблицы должно откатиться но этого не происходит, запись остается.
> Таблица InnoDB.
>
> Может я еще что-то забыл включить?
>
> start transaction;
> insert into `days_stat_ranks` (`id_domain`)
> values ( 2 );
>
> insert into `days_stat_ranks` (`id_domain`)
> values ( 1 );
> commit;
>
>


From: Сергей - 08/04/2011 - 01:32:55
Subject:Не работают транзакции
-----------------
Честно говоря не понятно причем здесь autocommit, в документации четко сказано, что autocommit после start transaction выключается.

http://dev.mysql.com/doc/refman/5.0/en/commit.html
---
To disable autocommit mode for a single series of statements, use the START TRANSACTION statement:

With START TRANSACTION, autocommit remains disabled until you end the transaction with COMMIT or ROLLBACK. The autocommit mode then reverts to its previous state.
---

AUTOROLLBACK - почему бы нет? Если что-то случилось делаем rollback. Мне кажется вполне естественно.

Кстати, на я попробовал пример на хостинге, он работает именно так: происходит откат изменений.

--------
DROP TABLE IF EXISTS domains;
CREATE TABLE IF NOT EXISTS domains (
id_domain int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id_domain)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


insert into domains (id_domain) values ( 1 );

start transaction;
insert into domains (id_domain) values ( 2 );
insert into domains (id_domain) values ( 1 );
commit;
---------------

А на домашнем компе (у меня стоит Денвер с MySQL 5.0.45-community-nt, этого не происходит). Видимо по разному настроены,
только вот знать бы в чем.

Насчет DECLARE EXIT HANDLER FOR SQLEXCEPTION, спасибо за наводку.
Я так понял это установка обработчика для процедуры.
К сожалению, насколько я понял, RESIGNAL есть только в MySQL 5.5, а у меня только 5.0. Как я понял он нужен чтобы после обработки исключения заново его перегенерить. Не подскажете как мне сделать такое же с 5.0, т.е. как дать знать PHP скрипту что внести измнения не удалось?




[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
38230



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |