mysql update: Array der betroffenen Zeilen?
Lukas.
- sql
1 dedlfix0 Lukas.
0 TS- mysql
0 Matthias Apsel0 TS0 Lukas.0 Christian Kruse0 TS0 Lukas.
Hallo,
gibt es die Möglichkeit, bei einem update-Query ein Array der betroffenen Zeilen zu erhalten?
Lukas
Tach!
gibt es die Möglichkeit, bei einem update-Query ein Array der betroffenen Zeilen zu erhalten?
Wenn ich einen solchen Wunsch habe, gehe ich so vor: Geh ins MySQL-Handbuch zur Seite des UPDATE-Statements. Ist da eine solche Funktionalität erwähnt? Wenn ja, geh ins PHP-Handbuch und schau nach, ob es eine entsprechende Funktion gibt. Oder: geh ins PHP-Handbuch und schau ob eine solche Funktionalität in der Funktionsbeschreibung dokumentiert ist. Auch die Userkommentare können Auskunft geben, mitunter über Alternativen.
dedlfix.
Hi,
Wenn ich einen solchen Wunsch habe, gehe ich so vor: Geh ins MySQL-Handbuch zur Seite des UPDATE-Statements. Ist da eine solche Funktionalität erwähnt? Wenn ja, geh ins PHP-Handbuch und schau nach, ob es eine entsprechende Funktion gibt. Oder: geh ins PHP-Handbuch und schau ob eine solche Funktionalität in der Funktionsbeschreibung dokumentiert ist. Auch die Userkommentare können Auskunft geben, mitunter über Alternativen.
Na, aber dann braucb ich ggf. eine bis zwei Stunden, um zu erkennen, dass es da nichts gibt, nicht weil es tatsächlich nichts gäbe, sondern weil ich zu doof war (respektive zu schlecht englisch spreche), es zu finden.
Egal, muß ich mir halt anders helfen, trotzdem danke.
Lukas
Hallo und guten Morgen,
gibt es die Möglichkeit, bei einem update-Query ein Array der betroffenen Zeilen zu erhalten?
Ich nehme jetzt mal mySQL als DBMS an.
Da kenne ich von Haus aus keine Möglichkeit. Aber Du kannst eine eigene Möglichkeit einbauen: Baue Dir einen Trigger, der in einer History-Tabelle die (unique) Statementnummer und die ID der Zeile abspeichert. Dann kannst Du anschließend
Table STATEMENT
id bigint unique autoincrement
stmt varchar (255)
timeofcall timestamp
Table STATEMNET_CALLS
id_statement bigint
id_record bigint
tablename varchar
Grüße
TS
Hi TS,
Da kenne ich von Haus aus keine Möglichkeit. Aber Du kannst eine eigene Möglichkeit einbauen: Baue Dir einen Trigger, der in einer History-Tabelle die (unique) Statementnummer und die ID der Zeile abspeichert. Dann kannst Du anschließend
Table
STATEMENT
id bigint unique autoincrement
stmt varchar (255)
timeofcall timestampTable
STATEMNET_CALLS
id_statement bigint
id_record bigint
tablename varchar
Mit Triggern kenne ich mich noch gar nicht aus, die werde ich mir mal zu Gemüte führen müssen. Danke für den Tip.
Lukas
Hallo und guten Morgen Lukas,
Mit Triggern kenne ich mich noch gar nicht aus, die werde ich mir mal zu Gemüte führen müssen. Danke für den Tip.
um zu üben und etwas schneller arbeiten zu können habe ich mir zu meinem XAMPP-System noch Heidi-SQL installiert. Ist kostenlos und ein wirklich schickes GUI für MySQL.
Da kannst Du dann die Sgtatements, Trigger, Tabellen usw. zusammenbauen und lässt sie dir dann im Befehlstext (Create-Statements usw.) anzeuigen.
Und ja, es gibt noch mehr praktische Tools ...
Grüße
TS
Hallo Lukas.,
gibt es die Möglichkeit, bei einem update-Query ein Array der betroffenen Zeilen zu erhalten?
Du kannst vorher ein entsprechendes SELECT ausführen.
Bis demnächst
Matthias
Hallo und guten Morgen,
gibt es die Möglichkeit, bei einem update-Query ein Array der betroffenen Zeilen zu erhalten?
Du kannst vorher ein entsprechendes SELECT ausführen.
Das ist schon wieder eine andere Baustelle. Vorher gucken schadet nie und dann aber eine Temp-Table mit den IDs erstellen und das eigentliche Update über ein Join mit diesem Temp-Table fahren.
Alternative eben Transaction einleiten und Logbuch schreiben, wie beschrieben in Posting
Grüße
TS
Hi Matthias,
gibt es die Möglichkeit, bei einem update-Query ein Array der betroffenen Zeilen zu erhalten?
Du kannst vorher ein entsprechendes SELECT ausführen.
Ja, genau das wollte ich in eoinem Schritt machen ;) Aber ok, solange ich nicht triggern kann (wie von TS vorgeschlagen), werde ich wohl so vorgehen. Danke, Lukas
Hallo Lukas.,
gibt es die Möglichkeit, bei einem update-Query ein Array der betroffenen Zeilen zu erhalten?
Du kannst vorher ein entsprechendes SELECT ausführen.
Ja, genau das wollte ich in eoinem Schritt machen ;) Aber ok, solange ich nicht triggern kann (wie von TS vorgeschlagen), werde ich wohl so vorgehen.
Nicht vergessen, dieser Weg ist nur sicher, wenn du einerseits innerhalb einer Transaktion arbeitest und zweitens mit SELECT ... FOR UPDATE
arbeitest. Ansonsten kann dir das aufgrund von Concurrency um die Ohren fliegen.
LG,
CK
Hallo und guten Morgen CK,
Nicht vergessen, dieser Weg ist nur sicher, wenn du einerseits innerhalb einer Transaktion arbeitest und zweitens mit
SELECT ... FOR UPDATE
arbeitest. Ansonsten kann dir das aufgrund von Concurrency um die Ohren fliegen.
Ich nehme an, dass es das wieder nur für InnoDB gibt und nicht für MyISAM?
Grüße
TS
Hallo TS,
Nicht vergessen, dieser Weg ist nur sicher, wenn du einerseits innerhalb einer Transaktion arbeitest und zweitens mit
SELECT ... FOR UPDATE
arbeitest. Ansonsten kann dir das aufgrund von Concurrency um die Ohren fliegen.Ich nehme an, dass es das wieder nur für InnoDB gibt und nicht für MyISAM?
MyISAM kann gar nichts und sollte auch nicht verwendet werden, wenn dir deine Daten lieb sind. Du nimmst also richtig an.
LG,
CK
Hallo Lukas,
Ja, genau das wollte ich in eoinem Schritt machen ;) Aber ok, solange ich nicht triggern kann (wie von TS vorgeschlagen), werde ich wohl so vorgehen.
Das sind aber zwei verschiwedene Schuhe:
Aber wenn Du vorher selectest, musst Du der Ordnung halber die Tabelle vom vor dem Select bis nach dem Update gegen Veränderungen durch Andere sperren. Sonst bekommst Du ein "TOCTTOU-Problem".
Grüße
TS
Hi Ts (und auch Matthias),
Aber wenn Du vorher selectest, musst Du der Ordnung halber die Tabelle vom vor dem Select bis nach dem Update gegen Veränderungen durch Andere sperren. Sonst bekommst Du ein "TOCTTOU-Problem".
Ja, das ist mir bewußt. Danke trotzudem für den Hinweis.
L.