Блокирует ли экземпляр MySQL с InnoDB строки, когда я запускаю транзакцию в Laravel?

Я пытаюсь внедрить кредитную систему в приложении, используя Laravel 4.2. Я планирую хранить пользовательский кредит в таблице. Поскольку я хочу, чтобы пользовательский кредит был свободен от условий гонки, я исследовал Интернет для правильной реализации. В некоторых ответах предполагалось, что если я буду использовать транзакции Laravel + экземпляр MySQL с InnoDB, не будет никаких условий гонки. В некоторых ответах мне предлагалось использовать lockForUpdate, но я боюсь, что неправильное использование может привести к взаимоблокировке.

Как мне это реализовать? Буду ли я в безопасности, если буду использовать только транзакции?


person furkantasel    schedule 12.01.2016    source источник


Ответы (1)


Я просмотрел исходный код и обнаружил, что транзакции Laravel 4.2 основаны на транзакциях PDO (например, PDO::beginTransaction). Использование транзакций PDO с MySQL имеет это поведение. Поскольку правила ACID соблюдаются, я предполагаю, что я в безопасности для своего варианта использования.

person furkantasel    schedule 08.02.2016