Два водителя, одновременно нажимающие кнопку «Принять», не означают обновление одной строки одновременно. Вероятность возникновения такого сценария бесконечно мала.
Но если это произойдет, это не обязательно тот случай, когда две транзакции обновляют строку. Это случай, когда одна транзакция пытается обновить строку, которая в данный момент обновляется. В любом случае транзакция, в настоящее время обновляющая строку, получает блокировку строки, а любая другая транзакция, пытающаяся обновить эту же строку, ставится в очередь.
После того, как первая транзакция завершает обновление, она снимает блокировку, и первая из другие транзакции в очереди получают блокировку для выполнения собственного обновления. Это продолжается до тех пор, пока очередь ожидания не опустеет.
Интересно, что это средство уже встроено в большинство реляционных баз данных, поэтому вам не нужно беспокоиться о двух транзакциях, обновляющих базу данных одновременно. Тем не менее, интересной областью исследования является то, как управлять очередями транзакций (например, расставлять приоритеты ожидающих транзакций) в этом сценарии.