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;

选择响应;

结束

将隐式连接更改为显式连接

update user join updateUserNamesAndNumbers on updateUserNamesAndNumbers.uuid = transferCode

我已经部分回答了我自己的问题。

感谢P.Salmon,用于查询transferCode变量。

事实证明,我将字符串定义为 varchar(24(,但输入实际上比这更大。

因此,一旦我对其进行排序,代码就可以工作,但只是第一次。

我仍然需要对此进行认真的考虑,因为第二次调用具有相同 transferCode 输入的相同例程,其中临时元组已被第一次调用删除,不会像我认为的那样抛出 MySQL 异常。所以"它仍然在思考时间上限">

最新更新