powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Вопрос по транзакциям
6 сообщений из 6, страница 1 из 1
Вопрос по транзакциям
    #38038639
RobinBobin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Верно ли утверждение, что запросы(update, delete, insert) в пределах одной транзакции, либо изменяют данные, либо вообще не изменяют данные(в случае какого-либо сбоя, например отключение электричества) ?

при параметрах БД
PRAGMA journal_mode = DELETE
PRAGMA synchronous = 2 (FULL)
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #38038651
RobinBobin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и правильно ли я понимаю, что если в одной транзакции 10к инсертов, то после коммита транзакции они все станут видимыми для селекта единовременно?
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #38038859
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RobinBobinВерно ли утверждение, что запросы(update, delete, insert) в пределах одной транзакции, либо изменяют данные, либо вообще не изменяют данные(в случае какого-либо сбоя, например отключение электричества) ?В этом и есть суть транзакции.

RobinBobinпри параметрах БД
PRAGMA journal_mode = DELETE
PRAGMA synchronous = 2 (FULL)А это не важно. Это влияет на то как и когда именно изменения произошедшие в "принятой" транзакции будут записаны в основную базу данных. Оборванные транзакции и отменненые в любом случае в базу не попадут.
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #38038870
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RobinBobinи правильно ли я понимаю, что если в одной транзакции 10к инсертов, то после коммита транзакции они все станут видимыми для селекта единовременно?Да конечно.
Впрочем есть два возражения:
1) Не принятые изменения не видны другим транзакциям, а внутри работающей они очень даже видны. То есть свои собственные insert ты будешь видеть всегда.
2) Это может зависеть от настроек базы. Если уровень изоляции низкий - то изменения видны сразу, если высокий то только после коммита. (за это отвечает pragma read_uncommitted)

Представь что у тебя в офисе сидят несколько человек и все пишут на своих листках бумаги. Потом они эти листки складывают в общую папку. Пока человек пишет на своем листке - никто не знает что он там написал. А когда листок лежит в папке все читающие папку могут увидеть текст на листе. При этом сам пишущий видит то что он пишет.
А если уровень изоляции маленький, то это значит все остальные могут подойти и заглянуть пишущему через плечо и увидеть недописанный текст.
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #38041644
RobinBobin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlRobinBobinи правильно ли я понимаю, что если в одной транзакции 10к инсертов, то после коммита транзакции они все станут видимыми для селекта единовременно?Да конечно.
Впрочем есть два возражения:
1) Не принятые изменения не видны другим транзакциям, а внутри работающей они очень даже видны. То есть свои собственные insert ты будешь видеть всегда.
2) Это может зависеть от настроек базы. Если уровень изоляции низкий - то изменения видны сразу, если высокий то только после коммита. (за это отвечает pragma read_uncommitted)


Спасибо за ответы. На сколько я понял, при стандартных настройках, при выполнении транзакции, если я сделаю селект в другом потоке программы, то данные будут не видны, пока транзакция не выполнится, а когда выполнится, то станут видны сразу все данные. так?
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #38042145
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RobinBobinСпасибо за ответы. На сколько я понял, при стандартных настройках, при выполнении транзакции, если я сделаю селект в другом потоке программы, то данные будут не видны, пока транзакция не выполнится, а когда выполнится, то станут видны сразу все данные. так?Нууу.... примерно так, плюс-минус.
Идею транзакций ты понял правильно. Но теперь ты напоролся на проблему что нету такой вещи как "стандартные настройки у sqlite". Есть только начальные настройки конкретной сборки.
То есть если ты используешь какой-либо dll пришедший откуда-то - очень рекомендуется прогнать при начале работы запросы типа:
pragma read_uncommited; и запомнить результат. Это и будут стандартные настройки той конкретной dll которую ты используешь.
Либо принудительно выставлять pragma read_uncommited = true/false при каждом подключении к базе.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Вопрос по транзакциям
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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