Транзакции в хранимых процедурах MySql

Я пытаюсь использовать транзакцию в хранимой процедуре MySQL.

В частности, обновите пользовательскую таблицу измененными данными из временной записи. из другого стола. затем после передачи удалите временную запись.

Я создал приведенный ниже код, который при выполнении возвращает строку «транзакция успешно завершена».

Однако на самом деле ничего не обновляется, и временная запись не удаляется.

Оба оператора SQL, выполняемые по отдельности, работают нормально, первый выполняет обновление, второй - удаление.

Может ли кто-нибудь объяснить мне, что может быть не так?

BEGIN 

-- set a default response
DECLARE response varchar(48) DEFAULT "the transaction has failed.";


DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN

    ROLLBACK;
    -- set vars

    SET response = "the transaction has failed, you may have already updated the account.";
    select response;

    END;


START TRANSACTION;

    -- we are inserting data, using information from another table

    update user, updateUserNamesAndNumbers

    SET user.firstName   = updateUserNamesAndNumbers.firstName,
        user.lastName    = updateUserNamesAndNumbers.lastName,
        user.landline    = updateUserNamesAndNumbers.landline,
        user.mobile      = updateUserNamesAndNumbers.mobile

    WHERE 

        updateUserNamesAndNumbers.uuid = transferCode

    AND

        updateUserNamesAndNumbers.userId= user.user_id

    ;


-- finally delete the original tuple


DELETE from updateUserNamesAndNumbers

where uuid= transferCode ;


SET response = "The transaction has succeeded";

COMMIT;

ВЫБРАТЬ ответ;

КОНЕЦ

Все, кроме кода переноса, квалифицировано в таблице - какой код переноса?

P.Salmon 04.10.2018 14:35

transferCode - входная переменная

user3004593 04.10.2018 16:52
Освоение архитектуры микросервисов с 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
2
60
2

Ответы 2

Измените неявное соединение на явное соединение

 update user join updateUserNamesAndNumbers on updateUserNamesAndNumbers.uuid = transferCode

Я частично ответил на свой вопрос.

Спасибо P.Salmon за запрос переменной transferCode.

Оказывается, я определил строку как varchar (24), но на самом деле ввод был больше.

Итак, как только я это отсортировал, код заработал, но только в первый раз.

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

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