|
|
|
уровни изоляции
|
|||
|---|---|---|---|
|
#18+
Привет всем, просьба подсказать как поступить правильно при изменении одной и тоже записи из разных транзакций 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 я думал что второе изменение не будет сохранено уровень изоляции менять не хотелось бы, но и терять изменения так же нельзя подскажите как правильно поступить Всем спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 09:15:37 |
|
||
|
уровни изоляции
|
|||
|---|---|---|---|
|
#18+
igrokj, для начала убедитесь, что на клиенте autocommit отключен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 13:03:10 |
|
||
|
уровни изоляции
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 13:34:56 |
|
||
|
уровни изоляции
|
|||
|---|---|---|---|
|
#18+
http://dev.mysql.com/doc/refman/5.5/en/set-transaction.html#isolevel_read-committed а пацаны и не знают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 15:00:50 |
|
||
|
уровни изоляции
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 17:10:11 |
|
||
|
уровни изоляции
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 18:16:54 |
|
||
|
уровни изоляции
|
|||
|---|---|---|---|
|
#18+
ScareCrow, это он offers в том смысле, что если ты выполнишь такую команду, тебя не пошлют, а попытаются имитировать этот уровень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 15:56:09 |
|
||
|
уровни изоляции
|
|||
|---|---|---|---|
|
#18+
MasterZiv, я чет не пойму. write skew ин изолейшен левел read commited (если уж начали бросаться крутыми словечками) - это нормально и документировано как и должно быть в субд. Приведите такую последовательность команд, которая показывает, что read commited в mysql работает неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 23:55:52 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38701859&tid=1834452]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 358ms |

| 0 / 0 |
