|
Вопрос по транзакциям
|
|||
---|---|---|---|
#18+
Верно ли утверждение, что запросы(update, delete, insert) в пределах одной транзакции, либо изменяют данные, либо вообще не изменяют данные(в случае какого-либо сбоя, например отключение электричества) ? при параметрах БД PRAGMA journal_mode = DELETE PRAGMA synchronous = 2 (FULL) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 18:59 |
|
Вопрос по транзакциям
|
|||
---|---|---|---|
#18+
и правильно ли я понимаю, что если в одной транзакции 10к инсертов, то после коммита транзакции они все станут видимыми для селекта единовременно? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 19:07 |
|
Вопрос по транзакциям
|
|||
---|---|---|---|
#18+
RobinBobinВерно ли утверждение, что запросы(update, delete, insert) в пределах одной транзакции, либо изменяют данные, либо вообще не изменяют данные(в случае какого-либо сбоя, например отключение электричества) ?В этом и есть суть транзакции. RobinBobinпри параметрах БД PRAGMA journal_mode = DELETE PRAGMA synchronous = 2 (FULL)А это не важно. Это влияет на то как и когда именно изменения произошедшие в "принятой" транзакции будут записаны в основную базу данных. Оборванные транзакции и отменненые в любом случае в базу не попадут. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 22:04 |
|
Вопрос по транзакциям
|
|||
---|---|---|---|
#18+
RobinBobinи правильно ли я понимаю, что если в одной транзакции 10к инсертов, то после коммита транзакции они все станут видимыми для селекта единовременно?Да конечно. Впрочем есть два возражения: 1) Не принятые изменения не видны другим транзакциям, а внутри работающей они очень даже видны. То есть свои собственные insert ты будешь видеть всегда. 2) Это может зависеть от настроек базы. Если уровень изоляции низкий - то изменения видны сразу, если высокий то только после коммита. (за это отвечает pragma read_uncommitted) Представь что у тебя в офисе сидят несколько человек и все пишут на своих листках бумаги. Потом они эти листки складывают в общую папку. Пока человек пишет на своем листке - никто не знает что он там написал. А когда листок лежит в папке все читающие папку могут увидеть текст на листе. При этом сам пишущий видит то что он пишет. А если уровень изоляции маленький, то это значит все остальные могут подойти и заглянуть пишущему через плечо и увидеть недописанный текст. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 22:14 |
|
Вопрос по транзакциям
|
|||
---|---|---|---|
#18+
White OwlRobinBobinи правильно ли я понимаю, что если в одной транзакции 10к инсертов, то после коммита транзакции они все станут видимыми для селекта единовременно?Да конечно. Впрочем есть два возражения: 1) Не принятые изменения не видны другим транзакциям, а внутри работающей они очень даже видны. То есть свои собственные insert ты будешь видеть всегда. 2) Это может зависеть от настроек базы. Если уровень изоляции низкий - то изменения видны сразу, если высокий то только после коммита. (за это отвечает pragma read_uncommitted) Спасибо за ответы. На сколько я понял, при стандартных настройках, при выполнении транзакции, если я сделаю селект в другом потоке программы, то данные будут не видны, пока транзакция не выполнится, а когда выполнится, то станут видны сразу все данные. так? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 15:10 |
|
Вопрос по транзакциям
|
|||
---|---|---|---|
#18+
RobinBobinСпасибо за ответы. На сколько я понял, при стандартных настройках, при выполнении транзакции, если я сделаю селект в другом потоке программы, то данные будут не видны, пока транзакция не выполнится, а когда выполнится, то станут видны сразу все данные. так?Нууу.... примерно так, плюс-минус. Идею транзакций ты понял правильно. Но теперь ты напоролся на проблему что нету такой вещи как "стандартные настройки у sqlite". Есть только начальные настройки конкретной сборки. То есть если ты используешь какой-либо dll пришедший откуда-то - очень рекомендуется прогнать при начале работы запросы типа: pragma read_uncommited; и запомнить результат. Это и будут стандартные настройки той конкретной dll которую ты используешь. Либо принудительно выставлять pragma read_uncommited = true/false при каждом подключении к базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 19:35 |
|
|
start [/forum/topic.php?fid=54&msg=38038859&tid=2008960]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 273ms |
total: | 394ms |
0 / 0 |