MyBatis führt mehrere SQL-Anweisungen auf einmal aus. Ist das möglich?

  • Ich habe mich gefragt, ob es möglich ist, mehrere SQL-Anweisungen in einem Schritt auszuführen. Zum Beispiel das Szenario, dass ich Zeilen aus mehreren Tabellen löschen möchte, gibt es eine Möglichkeit, Dinge zu tun wie ..

     <delete id="delete" parameterType="String">
        DELETE FROM DUMMYTABLE_A where X=${value}
        DELETE FROM DUMMYTABLE_B where X=${value}
    </delete>
     
    24 August 2011
    Marco
2 answers
  • Ich verwende myBatis mit Oracle. Ich denke, es gibt etwas Ähnliches in anderen DBs. Eigentlich können Sie immer Prozeduren in DB erstellen, was in der Regel besser ist, wenn Sie das Projekt unterstützen müssen

    01 December 2011
    Prateekhugomg
  • Ja, die meisten Datenbanken erlauben dies. Normalerweise müssen Sie Ihre SQL-Anweisungen mit etwas abgrenzen. In PostGRES und MySQL ist es ein Semikolon (;). In Microsoft SQL Server sollten Sie das Schlüsselwort GO verwenden. [Aktualisierung Mai 2013: Ab SQL Server 2012 können und sollten Sie Semikolons verwenden, um Ihre Anweisungen zu begrenzen. Nach SQL Server 2012 (dh der nächsten Version und danach) sind diese obligatorisch. Die Verwendung von GO ist jetzt die veraltete Methode, um Dinge in SQL2012 und darüber hinaus auszuführen. ]

    Beispiel für 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-Beispiel:

      DELETE FROM DUMMYTABLE_A where X=${value}
     GO
     DELETE FROM DUMMYTABLE_B where X=${value}
     GO
     DELETE FROM DUMMYTABLE_C where X=${value}
     

    Bessere Datenbanken (dh nicht MySQL) unterstützen auch Transaktionen mit BEGIN TRAN / COMMIT TRAN / ROLLBACK TRAN. Mithilfe von Transaktionen können Sie tatsächlich alle Anweisungen zu einer atomaren Operation zusammenfassen. Wenn ein Teil davon fehlschlägt, werden alle drei zurückgesetzt. Weitere Informationen finden Sie unter http://www.sqlteam.com/article/introduction-to-transactions über diese.

    Wahrscheinlich brauchen Sie nur die Semikola zwischen Ihren SQL-Anweisungen!

    05 May 2013
    Professor Falken