The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Запросы в транзакции MariaDB выполняются не смотря на ошибки."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Оптимизация и Промышленные системы (Другие СУБД)
Изначальное сообщение [ Отслеживать ]

"Запросы в транзакции MariaDB выполняются не смотря на ошибки."  +/
Сообщение от CHIMemail (ok), 11-Авг-22, 15:20 
Доброго времени суток.
Уважаемые знатоки, прошу совета!
Сервер MariaDB 10.5, пишу простенький запрос с транзакцией где данные копируются из одной таблицы в другую и помечаются как архивные, затем удаляются из первоисточника.
Суть в том, что даже работая с одной таблицей, поочерёдно выполняется код и не смотря на то, что есть попытка обновить несуществующую строку, транзакция не отменяется, а выполняется в полном объёме, что до попытки обновления, что после.

SET autocommit = OFF;
START TRANSACTION;
DELETE FROM test2 WHERE pnum=11;/*удаляем на всякий случай*/
INSERT INTO test2(fam,pnum) (SELECT fam,pnum FROM test1 WHERE id =334);/*из test1 копируем строку в test2*/
DELETE FROM test2 WHERE pnum=11;/*удаляем копируемую строку*/
UPDATE test2 SET location='arhiv' WHERE pnum=11;/*пытаемся обновить несуществующую строку*/
INSERT INTO test2(fam,pnum) (SELECT fam,pnum FROM test1 WHERE id =334);/*снова вставляем данную строку*/
COMMIT;
SELECT * FROM test2 WHERE pnum=11;

Не могу понять почему транзакция не отменяет изменения если в одном из запросов ошибка?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Запросы в транзакции MariaDB выполняются не смотря на ошибки."  +/
Сообщение от Аноним (1), 14-Авг-22, 06:04 
>[оверквотинг удален]
> INSERT INTO test2(fam,pnum) (SELECT fam,pnum FROM test1 WHERE id =334);/*из test1 копируем
> строку в test2*/
> DELETE FROM test2 WHERE pnum=11;/*удаляем копируемую строку*/
> UPDATE test2 SET location='arhiv' WHERE pnum=11;/*пытаемся обновить несуществующую строку*/
> INSERT INTO test2(fam,pnum) (SELECT fam,pnum FROM test1 WHERE id =334);/*снова вставляем
> данную строку*/
> COMMIT;
> SELECT * FROM test2 WHERE pnum=11;
> Не могу понять почему транзакция не отменяет изменения если в одном из
> запросов ошибка?

Я давно работал с SQL, но возникает вопрос, почему Вы "не нахождение по WHERE" считаете за ошибку? Это нулевая выборка, которая может вовсе и не рассматриваться как ошибка.

Ответить | Правка | Наверх | Cообщить модератору

2. "Запросы в транзакции MariaDB выполняются не смотря на ошибки."  +/
Сообщение от CHIMemail (ok), 15-Авг-22, 08:18 
>[оверквотинг удален]
>> UPDATE test2 SET location='arhiv' WHERE pnum=11;/*пытаемся обновить несуществующую строку*/
>> INSERT INTO test2(fam,pnum) (SELECT fam,pnum FROM test1 WHERE id =334);/*снова вставляем
>> данную строку*/
>> COMMIT;
>> SELECT * FROM test2 WHERE pnum=11;
>> Не могу понять почему транзакция не отменяет изменения если в одном из
>> запросов ошибка?
> Я давно работал с SQL, но возникает вопрос, почему Вы "не нахождение
> по WHERE" считаете за ошибку? Это нулевая выборка, которая может вовсе
> и не рассматриваться как ошибка.

А как в таком случае проверяют свои транзакции банки когда добавляют на один счёт 100р и нужно одновременно списать с другого счёта 100р, а если первая операция не прошла, то отменить все операции?

Ответить | Правка | Наверх | Cообщить модератору

3. "Запросы в транзакции MariaDB выполняются не смотря на ошибки."  +/
Сообщение от Сергей (??), 15-Авг-22, 09:37 
>[оверквотинг удален]
>>> COMMIT;
>>> SELECT * FROM test2 WHERE pnum=11;
>>> Не могу понять почему транзакция не отменяет изменения если в одном из
>>> запросов ошибка?
>> Я давно работал с SQL, но возникает вопрос, почему Вы "не нахождение
>> по WHERE" считаете за ошибку? Это нулевая выборка, которая может вовсе
>> и не рассматриваться как ошибка.
> А как в таком случае проверяют свои транзакции банки когда добавляют на
> один счёт 100р и нужно одновременно списать с другого счёта 100р,
> а если первая операция не прошла, то отменить все операции?

А у них не mySQL(MariaDb) юзается, и обычно в транзакции входят и списание и добавление, если что-то не проходит она и откатывается... Т.е. там все начинается с begin transaction

Ответить | Правка | Наверх | Cообщить модератору

4. "Запросы в транзакции MariaDB выполняются не смотря на ошибки."  +/
Сообщение от Непростое кино (?), 16-Авг-22, 10:37 
>[оверквотинг удален]
>>> COMMIT;
>>> SELECT * FROM test2 WHERE pnum=11;
>>> Не могу понять почему транзакция не отменяет изменения если в одном из
>>> запросов ошибка?
>> Я давно работал с SQL, но возникает вопрос, почему Вы "не нахождение
>> по WHERE" считаете за ошибку? Это нулевая выборка, которая может вовсе
>> и не рассматриваться как ошибка.
> А как в таком случае проверяют свои транзакции банки когда добавляют на
> один счёт 100р и нужно одновременно списать с другого счёта 100р,
> а если первая операция не прошла, то отменить все операции?

Ну select into where для проверки и if ом ветвить ты можешь?

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру