Я использую MySQL и Laravel. Представьте себе ситуацию, когда у меня две транзакции выполняются с одной и той же ручкой, сначала обновляются table1 и table2 в следующем порядке. вторая транзакция обновляет table2 и table1 в следующем порядке. поэтому у меня есть 3 сценария, и мне интересно, какой из этих сценариев произойдет.
T1 - transaction 1;
T2 - transaction 2;
1 сценарий) T1 блокирует table1. Тем временем T2 блокирует table2. обе таблицы заблокированы. через некоторое время они оба разблокируют свою заблокированную таблицу, поэтому T1 сможет изменить table1, а T2 сможет изменить table1. все закончено, никаких тупиков.
2 сценария) Ситуация та же, что и выше, но T1 и T2 не разблокируют свои таблицы, если они не закончили всю свою работу (я имею в виду изменение обеих таблиц). они бесконечно ждут разблокировки второго стола. так тупик.
3 сценария) T1 или T2 блокируют обе таблицы, поэтому вторая транзакция будет ждать, пока параллельная транзакция завершит свою работу и разблокирует обе таблицы. затем он также блокирует обе таблицы, и все в порядке, без блокировок.
какой из этих сценариев произойдет? может, никто из них? Я надеюсь, что вы, ребята, поможете мне ответить на этот вопрос, так что я буду знать, что мне следует управлять кодом, чтобы избежать тупиков транзакций, или транзакции laravel сделают это самостоятельно, и я просто использую транзакции и не думаю о взаимоблокировках. заранее спасибо.
Задача ещё не решена.
Других решений пока нет …