Транзакции Mysql в транзакциях

Блокировка (маркер) только используется для маркировки одного или нескольких блоков кода, которые не должны работать одновременно в нескольких потоках. Если Ваше приложение является однопоточным, оно защищает от условия, которое не может существовать.

И блокировка действительно вызывает хит производительности, добавляя инструкции проверить на одновременный доступ, прежде чем код будет выполнен. Это должно только использоваться в случае необходимости.

49
задан Brian 28 September 2009 в 19:16
поделиться

5 ответов

Эта страница руководства может вас заинтересовать: 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 implicit commit performed for any current transaction when you issue a START TRANSACTION выражение или один из его синонимов.

51
ответ дан 7 November 2019 в 11:23
поделиться

Хочу убедиться - это транзакции внутри транзакций, действительных в mysql?

No.

14
ответ дан 7 November 2019 в 11:23
поделиться

Возможно, вы захотите проверить метадологию вашего тестирования. За исключением MaxDB , MySQL не поддерживает ничего удаленно, например вложенные транзакции.

1
ответ дан 7 November 2019 в 11:23
поделиться

MySql не поддерживает вложенные транзакции. Однако есть несколько способов подражать этому. Во-первых, вы можете использовать точки сохранения в качестве формы транзакции, что дает вам два уровня транзакций; Я использовал это для тестирования, но я не уверен в ограничениях, если вы используете его в производственном коде. Более простое решение - игнорировать вторую начальную транзакцию и вместо этого увеличить счетчик. Для каждого коммита вы уменьшаете его. Как только вы достигнете нуля, вы выполните фактическую фиксацию . У этого есть очевидные ограничения; Например. откат откатит все транзакции назад, но в случае, когда вы используете транзакции только для обработки ошибок, это может быть приемлемо.

8
ответ дан 7 November 2019 в 11:23
поделиться
1
ответ дан 7 November 2019 в 11:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: