Повторить взаимоблокировки в mysql

Я пытаюсь реализовать стратегию повтора в тупике в mysql и nodej, но мне не хватает информации о фиксации транзакции.

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

мне нужно запускать все предыдущие запросы agian или повторять достаточно?

 connection.commitTransaction = function () {
            return new Promise((resolve, reject) => {
                const commit = () => {
                    connection.commit(function (err) {
                        if (err) {
                            console.error("err.code", err.code);
                            if (err.code === 'ER_LOCK_DEADLOCK') {
                                setTimeout(() => {
                                    commit();
                                }, 50);
                                return
                            }
                            return connection.rollback(function () {
                                connection.end();
                                reject(err);
                            });
                        }
                        connection.end();
                        resolve();
                    });
                };
                commit();
            });
        };
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
674
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваши транзакции откатываются, поэтому вам нужно снова выполнить запросы.

На самом деле вам, вероятно, придется снова запустить запросы разные (или, по крайней мере, проверить, действительны ли они), например снова применив логику, которая позволяет к этим конкретным запросам.

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

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