作为我在数据库学校项目的一部分,我在交易方面遇到了一些问题。经过大量阅读,我设法将一些东西放在一起更新帐户表。但是,我认为最终的IF声明失败了。
我想回滚,如果退出帐户后金额小于0,那么我想知道是否可以使用这样的IF语句?如果没有,欢迎任何建议!感谢:)
DELIMITER //
CREATE PROCEDURE withdrawFromAccount(pAccountId INT(11), pAmount DECIMAL(13,4))
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
SET @isValid = 0;
UPDATE `project3_account` SET `amount` = `amount` - pAmount WHERE `id` = pAccountId;
SELECT (CASE `amount` WHEN `amount` >= 0 THEN 1 ELSE 0 END) INTO @isValid FROM `project3_account` WHERE `id` = pAccountId;
IF (@isValid = 1) THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
END//
DELIMITER ;