Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用条件提交或回滚的mysql事务_Mysql_Database_Transactions - Fatal编程技术网

使用条件提交或回滚的mysql事务

使用条件提交或回滚的mysql事务,mysql,database,transactions,Mysql,Database,Transactions,作为我学校数据库项目的一部分,我在事务方面遇到了一些问题。经过大量阅读,我已经设法把一些东西放在一起,以更新帐户表。然而,我相信,如果最后的声明失败了 我想回滚,如果从帐户中取款后金额小于0,那么我想知道是否可以使用这样的if语句?如果没有,欢迎提出任何建议!谢谢:) 当你说它失败了,你有没有得到任何具体的错误?您可以提供详细信息,如您正在使用的数据库、版本和其他详细信息…没有错误,但表没有更改,因此它似乎没有提交..?可能重复 DELIMITER // CREATE PROCEDURE wit

作为我学校数据库项目的一部分,我在事务方面遇到了一些问题。经过大量阅读,我已经设法把一些东西放在一起,以更新帐户表。然而,我相信,如果最后的声明失败了

我想回滚,如果从帐户中取款后金额小于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 ;