Size: a a a

2020 November 05

A

Alex Darkside in MySQL
Ilia Zviagin
Вот как раз это, что в банках, и есть сага. Это реализуется только на уровне приложения.
А транзакции СУБД - это технический механизм для реализации этого
я знаю что на уровне приложение будет это ,ну можно и в лог сохранить все операции которые в одной транзакции выполняются под одним номером , и в дальнейшем из лога получить , а затем откатить назад , но это очень долго и трудно , я ищу способ по лучше и по легче ...
источник

IZ

Ilia Zviagin in MySQL
Alex Darkside
а как Вы решаете такие проблемы ? вы же не будете обратно еще раз написать 10 запросов чтоб откатить назад ? и запросы получаются динамическими в одной транзакции , это зависит от входящих данных. как Вы бы решили эту задачу ?
Да, на уровне приложения оформляется в виде данных задание , типа " для пользователя П перевести с его счета С деньги на его счёт С2 в размере 42 мешков золота", потом приложение эту инструкцию исполняет, и записывает где-то , что вот это вот указание " для пользователя П перевести с его счета С деньги на его счёт С2 в размере 42 мешков золота" выполнено, тогда-то, тем то, ну и так далее.


Соответственно, потом это все храниться и можно сформировать и выполнить другую операцию, обратную данной, и тоже выполнить
источник

A

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

IZ

Ilia Zviagin in MySQL
Alex Darkside
типо просо указать номер транзакции , а бд сама окатывала назад
Нет такого не бывает
источник

A

Alex Darkside in MySQL
Ilia Zviagin
Нет такого не бывает
а создать такую функцию тоже не получится ?
источник

IZ

Ilia Zviagin in MySQL
Alex Darkside
а создать такую функцию тоже не получится ?
Не получится.
Транзакции - это системный механизм функционирования СУБД, пользователям СУБД никакие средства управления ими не предоставляются.
Только начать транзакцию и завершить или отменить.
источник

IZ

Ilia Zviagin in MySQL
Alex Darkside
а создать такую функцию тоже не получится ?
То есть тебе все это придется делать руками.
источник

V

Vova in MySQL
Теоретически можно в некоторых СУБД залезть в журнал транзакций и потом долго и нудно руками выковыривать те, что надо
источник

A

Alex Darkside in MySQL
Ilia Zviagin
То есть тебе все это придется делать руками.
а СУБД может узнать каким образом пользователь выполняет запросы , ну с помощью транзакций или без ?  если я могу узнать сколько запросов и для каких таблиц выполняет пользователь , я могу это сохранить в лог с помощью триггеров . и я смогу создать сам функцию отката для операций в одной транзакции
источник

DE

Denis Efremov in MySQL
Alex Darkside
а СУБД может узнать каким образом пользователь выполняет запросы , ну с помощью транзакций или без ?  если я могу узнать сколько запросов и для каких таблиц выполняет пользователь , я могу это сохранить в лог с помощью триггеров . и я смогу создать сам функцию отката для операций в одной транзакции
Напомни, а что ты уже создал?
источник

V

Vova in MySQL
Alex Darkside
а СУБД может узнать каким образом пользователь выполняет запросы , ну с помощью транзакций или без ?  если я могу узнать сколько запросов и для каких таблиц выполняет пользователь , я могу это сохранить в лог с помощью триггеров . и я смогу создать сам функцию отката для операций в одной транзакции
может откатить транзакцию по каким-то условиям, но не постфактум
источник

IZ

Ilia Zviagin in MySQL
Alex Darkside
а создать такую функцию тоже не получится ?
Ну и ты не понимаешь, это не сделать на уровне СУБД, ты это просто не сможешь сделать.
Будут проблемы.

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

A

Alex Darkside in MySQL
Denis Efremov
Напомни, а что ты уже создал?
Когда каждый пользователь проекта с помощью программы со своего интерфейча что то добавляет или изменяет , например товар , или нового клиента, Mysql сохраняет все действия каждого пользователя в отдельную таблицу, ну как типо лог ...

А теперь нужно решать проблемму с откатам данных который пользователь ввел
источник

IZ

Ilia Zviagin in MySQL
Vova
Теоретически можно в некоторых СУБД залезть в журнал транзакций и потом долго и нудно руками выковыривать те, что надо
Даже теоретически нельзя
источник

A

Alex Darkside in MySQL
Ilia Zviagin
Ну и ты не понимаешь, это не сделать на уровне СУБД, ты это просто не сможешь сделать.
Будут проблемы.

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

DE

Denis Efremov in MySQL
Alex Darkside
Когда каждый пользователь проекта с помощью программы со своего интерфейча что то добавляет или изменяет , например товар , или нового клиента, Mysql сохраняет все действия каждого пользователя в отдельную таблицу, ну как типо лог ...

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

DE

Denis Efremov in MySQL
Denis Efremov
Event Storming | Open Practice Library

Event Storming is a rapid, interactive approach to business process discovery and design that yields high quality models. It was introduced in a blog by Alberto Brandolini in 2013. At the end of the event storm, you should have: A shared understanding of...
Тут
источник

IZ

Ilia Zviagin in MySQL
Alex Darkside
а СУБД может узнать каким образом пользователь выполняет запросы , ну с помощью транзакций или без ?  если я могу узнать сколько запросов и для каких таблиц выполняет пользователь , я могу это сохранить в лог с помощью триггеров . и я смогу создать сам функцию отката для операций в одной транзакции
Пользователь ВСЕГДА  все выполняет только с помощью транзакций
источник

V

Vova in MySQL
Ilia Zviagin
Даже теоретически нельзя
LogMiner
источник

A

Alex Darkside in MySQL
Ilia Zviagin
Пользователь ВСЕГДА  все выполняет только с помощью транзакций
Есть и операции только из одного запроса, и есть запросы которые выполняется и без транзакций это зависит от структуры бд и хранения информации, пользователь не всегда все запросы выполняет с помощью транзакций
источник