Запросы в транзакции MariaDB выполняются не смотря на ошибки., CHIM, 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; Не могу понять почему транзакция не отменяет изменения если в одном из запросов ошибка? |
- Запросы в транзакции MariaDB выполняются не смотря на ошибки., Аноним, 06:04 , 14-Авг-22 (1)
>[оверквотинг удален] > 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" считаете за ошибку? Это нулевая выборка, которая может вовсе и не рассматриваться как ошибка.
- Запросы в транзакции MariaDB выполняются не смотря на ошибки., CHIM, 08:18 , 15-Авг-22 (2)
>[оверквотинг удален] >> 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р, а если первая операция не прошла, то отменить все операции?
- Запросы в транзакции MariaDB выполняются не смотря на ошибки., Сергей, 09:37 , 15-Авг-22 (3)
>[оверквотинг удален] >>> COMMIT; >>> SELECT * FROM test2 WHERE pnum=11; >>> Не могу понять почему транзакция не отменяет изменения если в одном из >>> запросов ошибка? >> Я давно работал с SQL, но возникает вопрос, почему Вы "не нахождение >> по WHERE" считаете за ошибку? Это нулевая выборка, которая может вовсе >> и не рассматриваться как ошибка. > А как в таком случае проверяют свои транзакции банки когда добавляют на > один счёт 100р и нужно одновременно списать с другого счёта 100р, > а если первая операция не прошла, то отменить все операции? А у них не mySQL(MariaDb) юзается, и обычно в транзакции входят и списание и добавление, если что-то не проходит она и откатывается... Т.е. там все начинается с begin transaction - Запросы в транзакции MariaDB выполняются не смотря на ошибки., Непростое кино, 10:37 , 16-Авг-22 (4)
>[оверквотинг удален] >>> COMMIT; >>> SELECT * FROM test2 WHERE pnum=11; >>> Не могу понять почему транзакция не отменяет изменения если в одном из >>> запросов ошибка? >> Я давно работал с SQL, но возникает вопрос, почему Вы "не нахождение >> по WHERE" считаете за ошибку? Это нулевая выборка, которая может вовсе >> и не рассматриваться как ошибка. > А как в таком случае проверяют свои транзакции банки когда добавляют на > один счёт 100р и нужно одновременно списать с другого счёта 100р, > а если первая операция не прошла, то отменить все операции?Ну select into where для проверки и if ом ветвить ты можешь?
|