Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / уровни изоляции / 8 сообщений из 8, страница 1 из 1
21.07.2014, 09:15:37
    #38701522
igrokj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уровни изоляции
Привет всем,
просьба подсказать как поступить правильно при изменении одной и тоже записи из разных транзакций

mysql1>SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
mysql2>SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

mysql1>select status from tblTest where id=11;
0
mysql2>select status from tblTest where id=11;
0

mysql1>update tblTest set status=1 where id=11;
mysql2>update tblTest set status=2 where id=11;

mysql1>commit;
mysql2>commit;

и в итоге status=2
я думал что второе изменение не будет сохранено
уровень изоляции менять не хотелось бы, но и терять изменения так же нельзя

подскажите как правильно поступить

Всем спасибо
...
Рейтинг: 0 / 0
21.07.2014, 13:03:10
    #38701859
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уровни изоляции
igrokj, для начала убедитесь, что на клиенте autocommit отключен.
...
Рейтинг: 0 / 0
21.07.2014, 13:34:56
    #38701900
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уровни изоляции
On 21.07.2014 10:15, igrokj wrote:
> Автор: igrokj. Привет всем,
> просьба подсказать как поступить правильно при изменении одной и тоже
> записи из разных транзакций
>
> mysql1>SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
> mysql2>SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
>
> mysql1>select status from tblTest where id=11;
> 0
> mysql2>select status from tblTest where id=11;
> 0
>
> mysql1>update tblTest set status=1 where id=11;
> mysql2>update tblTest set status=2 where id=11;
>
> mysql1>commit;
> mysql2>commit;
>
> и в итоге status=2
> я думал что второе изменение не будет сохранено
> уровень изоляции менять не хотелось бы, но и терять изменения так же нельзя
>
> подскажите как правильно поступить

Это -- write skew
например тут http://en.wikipedia.org/wiki/Snapshot_isolation

Лечится чтением с блокировкой записи: SELECT ... FOR UPDATE.
Или комбинированием чтения и записи в одном операторе UPDATE (что в
общем-то по эффекту то же самое).


Уровня изоляции READ COMMITTED в MySQL реально нет, там либо snapshot,
либо SERIALIZABLE.
Эта данная транзакция (твой случай) должен быть выполнен на самом нижнем
уровне -- write commited. Так что про "уровень изоляции менять не
хотелось бы" -- всё мимо. И придётся, и (с другой стороны) ничего не
поменяется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.07.2014, 15:00:50
    #38702037
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уровни изоляции
...
Рейтинг: 0 / 0
22.07.2014, 17:10:11
    #38703164
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уровни изоляции
On 21.07.2014 16:00, ScareCrow wrote:

> http://dev.mysql.com/doc/refman/5.5/en/set-transaction.html#isolevel_read-committed
> а пацаны и не знают.

Там только синтаксис поддерживается.
Ядром. И передаётся в engine. Который только один по факту -- InnoDB.
(про maria ничего не скажу). А InnoDB поддерживает только один уровень
изоляции для чтания -- snapshot isolation, он же как бы MVCC (если со
стороны чтения смотреть). Это лучше по отсутствию побочных эффектов
(явлений по стандарту), чем и read uncommited, и read commited, и
repeatable read, поэтому они имеют право так делать.

Можно почитать тут:
http://dev.mysql.com/doc/refman/5.5/en/innodb-transaction-model.html

Можно и ещё где=то найти наверняка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.07.2014, 18:16:54
    #38703233
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уровни изоляции
MasterZiv
Можно почитать тут:
http://dev.mysql.com/doc/refman/5.5/en/innodb-transaction-model.html

Можно и ещё где=то найти наверняка.


авторInnoDB offers all four transaction isolation levels described by the SQL standard: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, and SERIALIZABLE.
...
Рейтинг: 0 / 0
27.07.2014, 15:56:09
    #38706771
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уровни изоляции
ScareCrow,
это он offers в том смысле, что если ты выполнишь такую команду, тебя не пошлют, а попытаются имитировать этот уровень.
...
Рейтинг: 0 / 0
27.07.2014, 23:55:52
    #38706900
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уровни изоляции
MasterZiv, я чет не пойму. write skew ин изолейшен левел read commited (если уж начали бросаться крутыми словечками) - это нормально и документировано как и должно быть в субд.

Приведите такую последовательность команд, которая показывает, что read commited в mysql работает неправильно.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / уровни изоляции / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]