Новый вопрос о транзакциях базы данных - PullRequest
2 голосов
/ 23 апреля 2009

Я знаю, что транзакции базы данных используются, чтобы гарантировать, что все операторы в транзакции будут выполнены, или ни одна из них не будет.

Но как насчет блокировки и безопасности потоков, например, если у меня есть sproc, который влияет на несколько таблиц, и я использую транзакцию в этом sproc, этот sproc вызывается из разных клиентов одновременно, транзакции будут работать параллельно или они будут в очереди? Другими словами, гарантирует ли использование транзакции, что она «заблокирует» всех других клиентов и заставит их ждать завершения транзакции?

Также есть ли различия между транзакциями базы данных в SQL Server и MySQL? Я имею в виду, как они работают.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2009

В зависимости от СУБД, но хранимые процедуры обычно не блокируются, строки в таблицах базы данных блокируются, и это предотвращает взаимодействие двух хранимых процедур между собой.

Это имеет более тонкую степень детализации блокировки, поэтому с меньшей вероятностью может вызвать конфликт.

В отношении различий между SQLServer и MySQL я бы не знал на более низком уровне - они вполне могут делать совершенно разные вещи. Но они будут идентичны с точки зрения стандарта SQL (иначе они были бы довольно бесполезны).

1 голос
/ 23 апреля 2009

TStamper уже предоставил ссылку на SQL Server против MySQL, но если вы заинтересованы в общем поведении транзакций, проверьте эти ссылки:

http://www.oracle.com/technology/oramag/oracle/05-nov/o65asktom.html http://en.wikipedia.org/wiki/Isolation_(database_systems)

Уровень изоляции варьируется в зависимости от СУБД. Некоторые системы СУБД позволяют настраивать уровень изоляции (более высокий уровень изоляции обычно означает более низкую скорость / пропускную способность из-за конфликта).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...