Блокировка (маркер) только используется для маркировки одного или нескольких блоков кода, которые не должны работать одновременно в нескольких потоках. Если Ваше приложение является однопоточным, оно защищает от условия, которое не может существовать.
И блокировка действительно вызывает хит производительности, добавляя инструкции проверить на одновременный доступ, прежде чем код будет выполнен. Это должно только использоваться в случае необходимости.
Эта страница руководства может вас заинтересовать: 12.3.3. Заявления, вызывающие неявную фиксацию ; цитируя несколько предложений:
Заявления, перечисленные в этом разделе (и любые синонимы к ним) неявно завершить транзакцию, как если бы вы сделали a
COMMIT
перед выполнением оператор.
И, немного дальше на странице:
Управление транзакциями и блокировка заявления.
НАЧАТЬ
,ТАБЛИЦЫ БЛОКИРОВКИ
,SET autocommit = 1
(если значение not already 1),START TRANSACTION
,UNLOCK TABLES
.
See also this paragraph :
Transactions cannot be nested.
This is a consequence of the implicitcommit
performed for any current transaction when you issue aSTART TRANSACTION
выражение или один из его синонимов.
Хочу убедиться - это транзакции внутри транзакций, действительных в mysql?
No.
Возможно, вы захотите проверить метадологию вашего тестирования. За исключением MaxDB , MySQL не поддерживает ничего удаленно, например вложенные транзакции.
MySql не поддерживает вложенные транзакции. Однако есть несколько способов подражать этому. Во-первых, вы можете использовать точки сохранения в качестве формы транзакции, что дает вам два уровня транзакций; Я использовал это для тестирования, но я не уверен в ограничениях, если вы используете его в производственном коде. Более простое решение - игнорировать вторую начальную транзакцию
и вместо этого увеличить счетчик. Для каждого коммита
вы уменьшаете его. Как только вы достигнете нуля, вы выполните фактическую фиксацию
. У этого есть очевидные ограничения; Например. откат откатит все транзакции назад, но в случае, когда вы используете транзакции только для обработки ошибок, это может быть приемлемо.
Это делает: http://dev.mysql.com/doc/refman/5.0/en/xa.html