2012-01-06 92 views
1

我想實現批量MySQL腳本來在數據庫中執行某些操作。問題是,對於每個我有我想要插入4元組的主ID。但是這個元組應該被添加到一個事務中,這意味着如果這四個元組中的一個失敗了,事務就應該回滾。然後我需要有一些捕獲機制來捕獲查詢失敗。我只能使用PURE MYSQL既不使用PHP,也不使用PERL等。即使我不能創建任何存儲過程來執行此操作。在Microsoft SQL Server中,有@@ error變量可以解決我的問題,但在MYSQL中,我們沒有任何顯示錯誤代碼的系統變量。 我該怎麼做?在MYSQL中發生錯誤

乾杯,

+0

我想趕上它來回滾事務 – Nami 2012-01-06 17:32:45

+0

爲什麼你不能在PHP包裝中包裝'批量MYSQL'腳本?然後你可以使用try/catch和rollback/commit。 – 2012-01-06 17:37:32

回答

0

這是一個醜陋的解決方法,但它的工作對我來說,當我試圖導入一批SQL查詢和事務中包住整個事情,這樣我就可以,如果任何的回滾SQL查詢出錯。

由於批處理的大小很大,因此帶有條件處理程序的SQL過程也不是一個選項。

你必須要做到這一點手動,所以這真的是沒辦法了,除非你是配料:

首先,確保你的整個批次存儲在SQL文件。 SQL文件應該只包含批量查詢,並且不包含事務控制查詢。

然後啓動一個MySQL命令行客戶端,並輸入交易手動命令:

mysql> SET AUTOCOMMIT = 0; 
mysql> START TRANSACTION; 

然後告訴命令行客戶端來運行批處理文件:

mysql> SOURCE path/to/file.sql 

之後,你可以簡單地取決於您對查詢結果的滿意程度,可以手動輸入COMMIT;ROLLBACK;

雖然這是一個混亂。任何人都有更好的方法?