Рассмотрим следующий рабочий процесс, работающий в MySQL с движком InnoDB.Каковы возможные режимы отказа чтения-фильтрации-записи внутри транзакции без блокировки?
- Начните сделку.
- Выберите несколько строк, используя
SELECT FROM tablename WHERE ...
, а неSELECT ... FOR UPDATE
. - Отфильтруйте эти строки, используя код, который не выполняется в базе данных (скажем, Python).
- Выполните команду
DELETE
в некоторых подмножествах строк. - Завершить сделку.
На основании this question, кажется, что этот рабочий процесс небезопасен из-за шага 2, но ответы не дали подробностей о режимах отказа.
Является ли это просто неопределенным поведением или существует определенный, четко определенный набор режимов отказа?
Кроме того, почему здесь не существует характера ACID для защиты от небезопасного поведения?