Скажите, что метод только считывает данные из базы данных и не пишет на него. Всегда ли так, что такие методы не нужно запускать внутри транзакции?Правильно ли говорить, что операции чтения данных не должны выполняться внутри транзакций?
ответ
№ Если вы не читаете на определенном уровне изоляции, вы можете не получить достаточных гарантий. Например, строки могут исчезнуть или появятся новые строки.
Это верно даже для одного оператора:
select * from Tab
except select * from Tab
Этот запрос может фактически возвращать строки в случае одновременных изменений, поскольку он сканирует таблицу дважды.
SQL Server: существует простой способ быстрого, неблокирующего, неблокирующего, последовательного чтения: Включить изоляцию моментальных снимков и прочитать в транзакции моментального снимка. У AFAIK Oracle также есть эта возможность. Postgres тоже.
Целью транзакции является откат или фиксация операций, выполняемых с базой данных, если вы просто выбираете значения и не изменяете данные, нет необходимости в транзакции.
Неправильно. Транзакции также могут обеспечивать согласованное представление данных. – usr
@usr Оператор select не должен использовать транзакцию. Совершенно бессмысленно, когда вы совершаете транзакцию, вы ничего не совершаете (поскольку ничего не изменилось), и поэтому вы будете нести накладные расходы на установление транзакции. транзакции просто используются для поддержания достоверных данных. Так что, если вы меняете одну таблицу, и от нее зависит другая таблица, вы не будете обновлять одну таблицу, не обновляя другую. Если второе обновление не выполняется, первое обновление будет возвращено в исходное состояние. Если оба они успешны, вы можете зафиксировать их вместе и обеспечить достоверные данные. Конд. – Zia
Другими словами, вам нужно всего лишь использовать transactiosn при вставке/обновлении/удалении и только при выполнении нескольких операций. – Zia
Во многих базах данных запрос на чтение из базы данных, который не находится в явной транзакции, неявно создает транзакцию для запуска запроса.
В базе данных SQL вы можете использовать транзакцию, если вы используете несколько операторов SELECT
, и вы не хотите, чтобы изменения из других транзакций отображались в одном SELECT
, но не ранее. Транзакция, выполняемая на уровне изоляции транзакции SERIALIZABLE
, будет представлять собой последовательное представление данных по нескольким операторам.
Мой ответ: Да. Тем не менее, люди на [dba.stackexchange.com] (http://dba.stackexchange.com) лучше подходят для этого. –