MySQL: mehrere SQL-Statements im gleichen Query

Mischa Sameli, Geschäftsführer & Leiter Entwicklung

Was bei einem MSSQL-Server eigentlich kein grosses Problem ist, macht keine Freude bei MySQL: mehrere SQL-Statements in einem Query.

Hier ein Beispiel. Wir versuchen 20 Datensätze zu aktualisieren, beispielsweise um dem ganzen Personal 25 Franken Lohnerhöhung auszuschütten. Eine simple Variante wäre:

1<cfloop query="qryGetIncome">
2 <cfquery name="qryUpdate" datasource="sql_database">
3 UDATE Loehne
4 SET Lohn = #qryGetIncome.Lohn# + 25
5 WHERE ID = #qryGetIncome.ID#
6 </cfquery>
Das funktioniert natürlich einwandfrei. Unschön bei dieser Variante ist, dass 20mal ein Verbindung zur Datenbank für das Update aufgenommen wird. Das heisst, der ColdFusion-Server nimmt für jedes Query neu Kontakt mit der Datenbank auf. Das geht in vielen Fällen eleganter beim MSSQL-Server. Und zwar so:
1<cfquery name="qryUpdate" datasource="sql_database">
2 <cfloop query="qryGetIncome">
3 UDATE Loehne
4 SET Lohn = #qryGetIncome.Lohn# + 25
5 WHERE ID = #qryGetIncome.ID#;
6
7 </cfloop>
Gemerkt? Es wird nun nur einmal eine Verbindung zur DB-Aufgenommen (cfquery) und alle SQL-Statements in dieser Connenction geschickt. Das schont sowohl den CF wie auch die DB. Möchte man die gleiche Technik mit einer MySQL-DB verwenden, hat man Pech. MySQL lässt dies einfach nicht zu, aus Sicherheitsgründen. Man muss bei jeder MySQL-Datenbank-Registrierung im CF-Admin den Connection-String von Hand erweitern. Zum Beispiel so:
1jdbc:mysql://localhost:3306/databasename?allowMultiQueries=true
Punkto Sicherheit ist die Haltung von MySQL sicher richtig, man muss solche Kniffs eben einfach kennen. Übrigens: mit mehrfachen SQL-Statemants ist Vorsicht geboten. Die Datenmenge, die in einem Query abgesetzt werden kann, ist beschränkt (64KB?).