Я пытаюсь использовать транзакцию в хранимой процедуре 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;
ВЫБРАТЬ ответ;
КОНЕЦ
transferCode - входная переменная






Измените неявное соединение на явное соединение
update user join updateUserNamesAndNumbers on updateUserNamesAndNumbers.uuid = transferCode
Я частично ответил на свой вопрос.
Спасибо P.Salmon за запрос переменной transferCode.
Оказывается, я определил строку как varchar (24), но на самом деле ввод был больше.
Итак, как только я это отсортировал, код заработал, но только в первый раз.
Мне все еще нужно хорошо подумать об этом, поскольку второй вызов той же процедуры с тем же вводом transferCode, где временный кортеж уже был удален первым вызовом, не вызывает исключение MySQL, как я думал должен. Так что "все еще думает о сроках"
Все, кроме кода переноса, квалифицировано в таблице - какой код переноса?