2012-06-09 30 views
2

MySQL存儲過程執行擔保和回滾,在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

BEGIN and END塊中放入您認爲可以通過錯誤的每條語句。

您可以捕獲塊中拋出的錯誤,並且可以指定一個變量來告訴您真正發生錯誤的位置。

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

error codes的列表可以找到here

可以找到UPDATE語句更新了哪些行的功能here