Как откатить неудачный запрос в mysql ?
Я пытаюсь поймать ошибку, возникшую при вставке 2 записей в 2 разных таблицы. Я хочу откатить уже сохраненные запросы, если второй запрос не удался.
Что я уже пробовал:
Я искал решение , и я решил использовать кодировку if внутри процедуры, чтобы проверить количество ошибок с помощью
@@error_count, вот мой код:
DELIMITER $$ -- This procedure is used to enter the sql commands DROP PROCEDURE IF EXISTS `procedure` $$ CREATE PROCEDURE `procedure`() BEGIN INSERT INTO `mschema`.`table1` (`maxbudget`, `blocked`, `d_percentage`, `max discount`) VALUES ('2250', '0', '.9', '.99'); set @x = @@error_count; if @x= 0 then INSERT INTO `mschema`.`table2` (`name`,`image`,`date`,`fKey_id`) values ('jhon','jfdd', '2018-01-01 00:00:00', LAST_INSERT_ID()); if @x= 0 then commit; else rollback; end if; else rollback; end if; END $$
Обратите внимание, что
firstdateзначение не повторяется в таблице 2.
когда я выполняю это, он выполняется успешно и дает мне результат в MySQL workbench следующим образом:
1. -- Эта процедура используется для ввода процедуры отбрасывания команд sql, если существует " процедура`
2. второй результат дал мне второй запрос вставки в таблицу 2, который я пытаюсь выполнить.
все результат был
0 row(s) affected.
Также важно отметить, что вставленные значения в таблицах 2 не повторяются. Так что я не знаю, в чем дело.