2009-04-23 3 views
2

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

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

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

ответ

2

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

У этого есть более мелкая степень блокировки, поэтому вероятность того,

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

+1

Если вы хотите добавить, InnoDB блокирует таблицу, MyISAM блокирует строку. в MySQL. –

+2

@ Ólafur Waage, на самом деле все наоборот – 2009-04-23 02:28:49

+0

Вы говорите, что MySQL (используя один из двигателей, непонятно, что) блокирует целую таблицу на время транзакции? Это кажется ужасным способом сделать это. – paxdiablo

1

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

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

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

Смежные вопросы