在mysql存储过程中执行surety和rollback以防万一

时间:2012-06-09 14:54:36

标签: mysql sql database stored-procedures consistency

MySQL存储过程

DELIMITER $$

USE `RMS`$$

DROP PROCEDURE IF EXISTS `posTransactionEntry`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `posTransactionEntry`(OUT trxID INT)
BEGIN

DECLARE trxID INT;

INSERT INTO `RMS`.`transaction`
(`MemberID`,`UserID`,`Type`,`UID`)
VALUES (NULL,1,0,'56c54e5c-075d-458d-9845-cf410f8a60ec');

SET trxID=(SELECT ID FROM `transaction` WHERE `transaction`.`UID`='56c54e5c-075d-458d-9845-cf410f8a60ec');
INSERT INTO `RMS`.`transactionentry`
        (
         `TransactionID`,
         `ItemID`,
         `Quantity`,
         `Unitcost`,
         `Price`,
         `SoldPrice`,
         `ReasonID`)
VALUES (trxID,28,10,23.23,10,10,NULL);
UPDATE `transaction` SET `transaction`.`UID`=0 WHERE `transaction`.`ID`=trxID;

END$$

DELIMITER ;

此存储过程中有四个陈述。如果发生错误,我们如何找到由于哪个语句错误出现以及特定语句执行成功的肯定。如果出现错误,我们可以知道哪个语句生成错误以及我们如何回滚所有已执行的语句。

意味着一致性和保证,我们如何才能实现?

1 个答案:

答案 0 :(得分:1)

将您认为可以通过BEGIN and END块中的错误的每个语句放入。

你可以捕获块中抛出的错误,你可以分配一个变量来告诉你错误发生在哪里。

可以找到BEGIN and END的文档和示例here

可以找到error codes的列表here

可以找到UPDATE语句更新了多少行的函数here