Подобие транзакций

leosha

Старожил PHPCLub
Подобие транзакций

Потребовалось мне тут сделать некое подобие транзакций...
Первое что пришло на ум, такая вот, примерно, схема:

1) Пользователь начинает работу. Выдаем ему идентификатор UID.
ID всех записей, которые он делает в таблицы, заносим в таблицу TRANSACTION
с указанием этого ID, имя таблицы и UID.

2)На каждой странице делаем кнопки "Сохранить состояние" и "Откат".

3) При нажатии на "Сохранить" - очищаем таблицу TRANSACTION для данного UID.
После этого, откат невозможен. И таблицу TRANSACTION начинаем заполнять по новой..

4) При нажатии на "Откат" - читаем из TRANSACTION что там наделал данный UID,
строим запросы на удаление соответствующих записей, выполняем эти запросы,
опять же очищаем TRANSACTION, радостно извещаем юзера, что все что он сделал
с момента последнего нажатия на "Сохранить", мы уже удалили и он может начать по новой...

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

И вообще, не сильно большой велосипед я изобретаю?

Мда. Скажите мне, почему не НАДО так делать.. =)
 

Romantik

TeaM PHPClub
Интересует данная тема.
Пришел к выводу, что если база не производит денежных и других важных операций. а просто содержит форум или голоса или еще что-то то редкий сбой не приведет к финансовому краху.
С другой стороны, если сайт с небольшим доступом народу (внутренний сервер или корпоративный) и очень хочется использовать подобие транзакций MySQL то можно прибегнуть к блокированию соотв таблицы, что не отразится сильно на производительности.

А если, проверять что занес в базу пользователь (разные записи AND) и если ложно то производить обратное действие.
 

Demiurg

Guest
А может если база не очень большая легче создавать временные таблицы?
А если несколько пользователей одновременно работают? тогда вообще ничего не получится наверно.
 

leosha

Старожил PHPCLub
М... с смысле - пишем все во временную таблицу, а потом в конце сеанса работы переписываем в основные? Суть практически та же.
 

Jazzer

Guest
а чем не устраивает механизм транзакций, реализованный в mysql 3.23?
 

leosha

Старожил PHPCLub
А он там есть? Гм.. сейчас поставлю и почитаю мануал.. Как-то я пропустил этот момент. Спасибо.
 

Eagle

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