我想知道是否可以在1次執行多個sql語句。 例如,我想從多個表中刪除行的情況下,是有辦法,我可以做這樣的事情..MyBatis一次執行多個sql語句,這可能嗎?
<delete id="delete" parameterType="String">
DELETE FROM DUMMYTABLE_A where X=${value}
DELETE FROM DUMMYTABLE_B where X=${value}
</delete>
我想知道是否可以在1次執行多個sql語句。 例如,我想從多個表中刪除行的情況下,是有辦法,我可以做這樣的事情..MyBatis一次執行多個sql語句,這可能嗎?
<delete id="delete" parameterType="String">
DELETE FROM DUMMYTABLE_A where X=${value}
DELETE FROM DUMMYTABLE_B where X=${value}
</delete>
是,大多數數據庫允許這一點。通常你必須用一些東西來劃分你的SQL語句。在PostGRES和MySQL中,它是一個分號(;)。在Microsoft SQL服務器中,您應該使用關鍵字GO。 [2013年5月更新:從SQL Server 2012開始,您可以並應該使用分號分隔您的語句。在SQL Server 2012之後(即下一版本和更高版本),這些將是強制性的。使用GO現在是在SQL2012及更高版本中做事的不贊成使用的方式)。 ]
的MySQL/POSTGRES例如:
DELETE FROM DUMMYTABLE_A where X=${value};
DELETE FROM DUMMYTABLE_B where X=${value};
DELETE FROM DUMMYTABLE_C where X=${value};
MS-SQL例如:
DELETE FROM DUMMYTABLE_A where X=${value}
GO
DELETE FROM DUMMYTABLE_B where X=${value}
GO
DELETE FROM DUMMYTABLE_C where X=${value}
更好的數據庫(即,不是MySQL的。)也將支持與BEGIN TRAN/COMMIT TRAN/ROLLBACK TRAN交易。使用事務可以實際將所有語句批處理成一個原子操作,如果部分操作失敗,所有三個語句都會回滾。有關這些的更多信息,請參閱http://www.sqlteam.com/article/introduction-to-transactions。
儘管您最需要的是SQL語句之間的分號!
我正在使用myBatis和Oracle。我想在其他數據庫中有類似的東西。實際上,當你需要支持這個項目時,你總是可以在DB中創建過程,這通常對未來更好。
<delete id="deleteUnfinishedData" parameterType="map">
{call
declare
begin
delete from TABLE1 where id = #{valueFromMap1};
delete from TABLE2 where id = #{valueFromMap2};
end
}
</delete>
我不知道,但這並不爲我工作我附上下一個要點https://gist.github.com/AdelinGhanaem/b565ca3a447e89087ab7你可以看到,它不與兩個分開的語句'查詢'與回滾... – Adelin
我試過這種方式,myBatis拋出一個異常。問題在於我沒有在JDBC URL中設置標誌allowMultiQueries = true。謝謝。 –
這對我不起作用,我試圖通過'in'條件刪除兩批數據,但是我得到了sql語法語法錯誤。 –