Частичные обновления: запрос затем обновит строку в SQL, чтобы гарантировать обновление только измененных значений. - PullRequest
1 голос
/ 16 июня 2020

Я пытаюсь обновить строку таблицы, но я не могу заранее знать, какое поле будет обновлено.

Сначала я думал, что просто запрашиваю существующую строку, а затем сравниваю старые значения против новых значений и обновлять только те, которые отличаются, но даже если это очень маловероятно в моем случае использования, если кто-то должен обновить данные в середине моего обновления (при сохранении результата моего запроса -compare- в память / оперативная память), я бы перезаписал все изменения, сделанные после обновления. другие запросы или в конечном итоге с тем же результатом.

Каков правильный способ (если он есть) обновлять только поле, которое я хочу, при передаче всего «обновленного» объекта. Я мог бы подготовить столько комбинаций запросов, сколько их столбец, и решить во время выполнения, какой запрос использовать, но это кажется настолько беспорядочным и нереалистичным c, что я уверен, что есть другой способ сделать это.

Отредактируйте с примером проблемы, которую я пытаюсь избежать:

исходные данные: c1 = foo c2 = bar

Серверная часть делает запрос и извлекает строку поэтому будет удерживаться в оперативной памяти c1 = foo c2 = bar

в то же самое время, когда другой пользователь сделает то же самое и будет удерживать c1 = foo c2 = bar

пользователь 1 хочет обновить c2 до " hello "

пользователь 2 хочет обновить c1 до" привет "

Запрос обновления пользователя 1 будет UPDATE table SET c1="foo" ,c2="hello"

Запрос обновления пользователя 2 iwll будет UPDATE table SET c1="hi" ,c2="bar"

Пользователь, для которого запрос отправлен первым, будет заменен другим пользователем.

...