На самом базовом уровне, если я правильно читаю ваш вопрос, вы обычно не хотите вслепую обновлять всю запись в случае, если другой пользователь уже обновил части этой записи, которые вы на самом деле не изменили. Вы бы слепо и без необходимости возвращали свои обновления.
Я полагаю, что ваш текущий алгоритм может привести к грязным записям, если вы собираетесь прочитать текущее для обновления один раз, разрешить обновления в памяти, а затем снова прочитать запись, чтобы вы могли выяснить, какие поля были обновлено. Что произойдет, если другой пользователь обновит эту запись за вашей спиной, заставив ваш алгоритм полагать, что вы были тем, кто обновил это поле? Но прежде всего вам не нужно читать каждую запись дважды, чтобы выполнить одно обновление.
Если ваши данные не часто приводят к конфликтам, вы можете извлечь пользу из чтения об оптимистической блокировке, даже если вы не решите ее реализовать.
Мы реализовали здесь один метод, с помощью которого вы добавляете отметку времени обновления или добавочный столбец числа обновлений к вашей таблице. Затем в своей песочнице / памяти вы можете отслеживать, какие поля вы изменили (oldvalue / newvalue), и вы можете свободно выдавать обновляющий SQL для этой записи для этих полей: "UPDATE ... WHERE UPDATENUM = номер-оригинала-номера" "(или WHERE UPDATETS = the-original-timestamp), чтобы убедиться, что ваш SQL обновления также увеличивает UPDATENUM или UPDATETS, в зависимости от ситуации. Если записи, затронутые этим обновлением SQL, равны 0, вы знаете, что кто-то уже изменил эту запись в фоновом режиме, и у вас теперь есть конфликт. Но, по крайней мере, вы не перезаписали чужие изменения, и затем вы можете перечитать новые данные или разрешить пользователю разрешить конфликт.