2011-11-25 102 views
0

MySQL有一個不錯的SQL提示。交易在MySQL控制檯

之一,它的命令是source從一個文本文件中的命令讀取並執行它們,就像它們在提示符下鍵入。

具有以下條件行這樣一個文本文件:

BEGIN TRANSACTION; 
UPDATE ....; 
UPDATE ....; 
DELETE FROM ...; 
COMMIT; 

如果有任何中間這些SQL語句的語法或其他錯誤,他們仍然繼續執行剩下的,包括COMMIT !哎喲!

你怎麼能使其因此,如果任何命令失敗,事務和腳本都將立即中止?

回答

2

你需要declare an exception handler

DECLARE EXIT HANDLER 
    FOR SQLEXCEPTION, SQLWARNING, NOT FOUND 
     ROLLBACK; 
+0

啊哈非常有前途的。可悲的是,它只是告訴我在語法上有一個錯誤;它並沒有說明究竟是什麼。我想這隻能在程序或其他東西中聲明,而且如果我把代碼放在一個不是會話本地的程序中,它不能使用session @variables? – Will

+0

這確實是正確的。另一種解決方案可能是做一個'SHOW WARNINGS''' SHOW ERRORS'(或COUNT它們),並在最後的COMMIT/ROLLBACK基礎上(COUNT)。 – Konerak