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?).

Bitte lassen Sie dieses Feld leer
Kommentar hinzufügen


Bitte lassen Sie dieses Feld leer
Beitrag als E-Mail verschicken
E-Mail via Webmail versenden

Schön, dass Ihnen unser Beitrag gefallen hat. Benutzen Sie folgende Social Networking Dienste, um den Beitrag abzulegen und zu verteilen. Selbstverstädlich können Sie ein direktes Lesezeichen auf diesen Artikel setzen.