У меня есть mysql процедура, которая выполняет 4 запроса на вставку. Я хочу откатить их все, если хотя бы один из них не удался. Я попробовал START TRANSACTION, COMMIT и ROLLBACK безуспешно. Theres способ откатить вставки или я должен сделать запросы на удаление, чтобы отменить вставки?
BEGIN
declare id_orcamento INT;
declare orcamento_success INT DEFAULT 1;
declare modelos_success INT DEFAULT 1;
declare urgencia_success INT DEFAULT 1;
declare ida_success INT DEFAULT 1;
START TRANSACTION;
SET id_orcamento = insere_orcamento_table(id_utilizador,nome_cliente,telefone_cliente,mail_cliente,descricao_cliente,preco_portes,preco_criacao);
IF id_orcamento > 0 THEN
-- insere modelos
SET modelos_success = insere_modelos_table(id_utilizador, id_orcamento);
IF modelos_success = 1 THEN
TRUNCATE ORCAMENTOS_MATERIAIS_TEMP;
END IF;
-- insere os custos
IF urgencia='sim' THEN
INSERT INTO ORCAMENTO_CUSTOS(ID_ORCAMENTO,ID_CUSTO,PRECO_URGENCIA,PRECO_KM,IDA,VOLTA,NUM_KM,PRECO_MAO_OBRA,NUM_PESSOAS,NUM_HORAS) VALUES (id_orcamento,1,preco_urgencia,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
SELECT ROW_COUNT() INTO urgencia_success;
END IF;
IF(ida='sim' AND volta IS NULL) THEN
INSERT INTO ORCAMENTO_CUSTOS(ID_ORCAMENTO,ID_CUSTO,PRECO_URGENCIA,PRECO_KM,IDA,VOLTA,NUM_KM,PRECO_MAO_OBRA,NUM_PESSOAS,NUM_HORAS) VALUES (id_orcamento,2,NULL,(SELECT PRECO_CUSTO FROM CUSTOS WHERE ID_CUSTO = 2),1,NULL,num_km,NULL,NULL,NULL);
SELECT ROW_COUNT() INTO ida_success;
END IF;
IF mao_obra='sim' THEN
INSERT INTO ORCAMENTO_CUSTOS(ID_ORCAMENTO,ID_CUSTO,PRECO_URGENCIA,PRECO_KM,IDA,VOLTA,NUM_KM,PRECO_MAO_OBRA,NUM_PESSOAS,NUM_HORAS) VALUES (id_orcamento,3,NULL,NULL,NULL,NULL,NULL,(SELECT PRECO_CUSTO FROM CUSTOS WHERE ID_CUSTO = 3),num_pessoas,num_horas);
SELECT ROW_COUNT() INTO urgencia_success;
END IF;
ELSE
SET orcamento_success = 0;
END IF;
IF (orcamento_success=1 AND modelos_success=1 AND urgencia_success=1 AND ida_success=1) THEN
SET result = 1;
COMMIT;
ELSE
SET result = 0;
ROLLBACK;
END IF;
END