2014-11-03 53 views
1

之前,我有如下的MySQL腳本:從查詢返回錯誤完成它

start transaction; 
set autocommit = 0; 
call RollbackRemove(1, 10); 
call RollbackRemove(2, 5000); 
commit; 

和程序:

create procedure RollbackRemove(a INT, b NUMERIC(8, 0)) 
begin 
    declare ret bool; 
    select Remove(a, b) into ret; 
    if not ret then 
     rollback; 
    end if; 
end // 

它試圖從每個項目中刪除一定量的,如果有刪除失敗,事務被回滾(在程序中)。不過,我已經注意到,即使在調用回滾之後,腳本仍會繼續執行,但這不是期望的。此外,我想能夠報告一個錯誤(這將被稱爲從PHP)。我一直在尋找可以更快結束腳本的機制,如其他語言中的return,但沒有找到任何內容。我應該在這種情況下使用什麼?

+0

你可以使用[exit()](http://php.net/manual/en/function.exit.php)。 – 2014-11-03 16:30:35

+0

這是全部在MySQL嗎? – 2014-11-03 16:31:52

+0

也許這一個:http://stackoverflow.com/a/1275431/650405?醜陋的...... – 2014-11-03 16:32:38

回答

1

也許你可以使用SIGNAL來引發錯誤。

+0

這會停止腳本嗎? – 2014-11-03 16:35:02

+0

如果您提出錯誤,則會終止該過程。如果你提出警告,不會。 – mgaido 2014-11-03 16:38:06

+0

感謝您的快速反應,解決方案是將'SIGNAL SQLSTATE'45000''放回到過程中,這將使事務處理之前的數據庫處於狀態並結束腳本,同時也會產生錯誤,正是我需要的。 – Raven 2014-11-03 16:54:10