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




MySQL.RU - Webboard



Вернуться
transaction (GAMER) 14/06/2012 - 11:43:32
      Re: transaction (Akina) 14/06/2012 - 13:12:54
      Re: transaction (GAMER) 15/06/2012 - 12:33:00
      Re: transaction (GAMER) 15/06/2012 - 12:34:40
      Re: transaction (Akina) 15/06/2012 - 14:18:17
      Re: transaction (GAMER) 15/06/2012 - 14:47:44
      Re: transaction (Akina) 17/06/2012 - 00:18:45
      Re: transaction (GAMER) 17/06/2012 - 18:26:22
      Re: transaction (Akina) 17/06/2012 - 21:53:31
      Re: transaction (GAMER) 18/06/2012 - 20:42:56

> Original message text:
> From: GAMER - 14/06/2012 - 11:43:32
> Subject:transaction
> -----------------
> Использую тип Aria. Хочу сделать так, что пока не будет COMMIT, чтобы другие процессы ничего не видели из изменений. И если отвалилась сессия, то чтобы ничего не сохранилось.
> Делаю так:
>
> Код:
> SET AUTOCOMMIT=0;
> START TRANSACTION;
> insert into logs set username='3333333';
>
>
>
> Но другая сессия уже видит эти изменения. Что еще нужно сделать и работает ли оно в принципе?
>


From: GAMER - 15/06/2012 - 12:33:00
Subject:transaction
-----------------
Допустим, вы используете уровень изоляции, установленый по умолчанию - REPEATABLE READ. При выполнении согласованного чтения (т.е. обычного оператора SELECT) InnoDB определяет для транзакции момент времени, по состоянию на который запросу будет предоставляться информация из базы данных. Таким образом, если транзакция удаляет строку и фиксирует это изменение после назначенного момента времени, то вы не увидите, что строка была удалена. Это справедливо также для вставок и обновлений.

Чтобы такой момент времени ``передвинуть вперед'', нужно зафиксировать транзакцию, а затем выполнить новую команду SELECT.

Это называется многовариантным контролем совпадений.

Пользователь A Пользователь B

SET AUTOCOMMIT=0; SET AUTOCOMMIT=0;

время
| SELECT * FROM t;
| пустой набор данных
| INSERT INTO t VALUES (1, 2);
|
v SELECT * FROM t;
пустой набор данных
COMMIT;
SELECT * FROM t;
пустой набор данных;

COMMIT;

SELECT * FROM t;
---------------------
| 1 | 2 |
---------------------

Таким образом, пользователь A увидит строку, вставленную пользователем B только после того, как B зафиксирует вставку, и A зафиксирует свою собственную транзакцию, чтобы момент времени передвинулся на позицию, находящуюся после фиксации, произведенной пользователем B.

Так вот, у меня второй пользователь видит изменения сразу.


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

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

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



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