Как не отправить в базу данных, а выбрать измененные данные

У меня есть база данных с несколькими таблицами

и пользователь может изменить данные в таблице.

у меня проблемы в том, что я ничего не изменяю в базе данных, пока пользователь не нажмет кнопку "сохранить", и даже когда он это сделает - он отправит только таблицу, которую он решит сохранить

но в то же время необходимо, чтобы пользователь мог видеть все изменения, которые он сделал. и каждый "выбор" должен дать ему измененные данные, а не базовые данные.

как я могу с одной стороны не передавать данные в базу данных, а с другой стороны показывать данные, измененные пользователю?

Я думал сделать транзакцию и не отправлять (и использовать чтение незафиксированным), но для этого я не должен закрывать соединение (если я закрываю без отправки - все изменения отменяются), и я не оставляю несколько соединения открыты.

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

Спасибо

2 ответа

Решение

Это будет очень сложно, поскольку вы настаивали на том, что вы не можете использовать транзакции.

Лучшее, что я могу предложить, - это добавить столбцы в каждую таблицу, чтобы представить состояние, но даже тогда будет сложно определить, как пользователь A видит предварительное изменение, а пользователь B - сообщение, но еще не зафиксировал.

Возможно, вы могли бы взглянуть на использование двух таблиц и иметь представление о выборе подходящих данных из обеих в зависимости от требований.

В любом случае, это неприятный способ и не очень эффективный.

В тот момент, когда вы настаивали на том, что не можете использовать транзакцию, вы упускаете шанс получить простой ответ.

Временная таблица здесь не поможет (как предложено выше), так как она связана с соединением, которое, как вы заявляете, будет закрыто. Единственное альтернативное решение для временных таблиц - это глобальная временная таблица, но это также приводит к проблемам (кто ее создает, что, если вы используете последнее соединение, проверьте, существует ли оно и т. Д.)

Вы можете использовать временные таблицы для хранения временных данных, а затем перемещать их по мере необходимости.

Другие вопросы по тегам