Вот моя мысль: вы не хотите вкладывать слишком много человеко-часов в проблему, которая вряд ли случится.Поэтому возьмите простое решение, которое не вызовет большого количества побочных эффектов, и исправьте его позже, если возникнет проблема.
В мире, основанном на веб-технологиях, вы не хотите блокировать таблицу дляпользователь должен внести изменения, а затем подождать, пока они не закончат, чтобы разблокировать таблицу.Пользователь 1 в этом сценарии может никогда не вернуться, он может потерять свой сеанс, или его браузер может зависнуть, и т. Д. Это означает, что вам нужно проделать большую работу, чтобы выяснить, когда разблокировать таблицу, плюс код, чтобы сообщить пользователю 2что таблица заблокирована, и они ничего не могут с ней сделать.
Я бы предложил этот дизайн вместо этого: позвольте им обоим перейти в режим редактирования, возможно, в браузере, с некоторым javascript.Они могут перетаскивать изображения по порядку, пока не будут довольны, затем они отправляют заказ в полном объеме.Вы обновляете свое поле order_num
в одной транзакции для базы данных.
В этом сценарии худшее, что происходит, это то, что пользователь 1 и пользователь 2 редактируют одновременно, и тот, кто редактирует последним, является тем, чей порядок сохраняется.Может быть, они обновляются в одно и то же время, но база данных справится с этим, так как собирается поставить транзакции в очередь.
Откат к этой проблеме заключается в том, что тот, кто получил перезаписанный заказ, должен сделать это снова.Раздражает, но нет потерь, и код для реализации этого на 1010 * намного проще, чем код для блокировки.
Я ненавижу обходить ваш вопрос, но это мои мысли по этому поводу.