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

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

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

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

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

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

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

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

Спасибо


person chmouel kalifa    schedule 18.09.2015    source источник


Ответы (2)


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

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

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

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

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

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

person Rachel Ambler    schedule 18.09.2015
comment
Я ни на чем не настаивал, если я справлюсь с заглушкой - реши! но как? - person chmouel kalifa; 18.09.2015
comment
Затем оставьте соединение открытым и зафиксируйте транзакцию, когда пользователь нажмет кнопку «Сохранить». Если они выйдут, закроют транзакцию, и изменения будут отменены, то же самое, если приложение разорвет соединение. - person Rachel Ambler; 18.09.2015
comment
Я думал, что не могу оставить соединение открытым. потому что не хватает соединений, и он выйдет из строя. если предложите лучшее решение - попробую - person chmouel kalifa; 19.09.2015
comment
Sql может поддерживать 32 767 активных соединений в зависимости от того, как он настроен и сколько там памяти. - person Rachel Ambler; 19.09.2015

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

person Vyacheslav Shcherbak    schedule 18.09.2015
comment
это значит, что я должен скопировать всю таблицу в память. нет? если да - я не могу его использовать (слишком много больших данных) - person chmouel kalifa; 18.09.2015