Rückgabewert von UPDATE ?
erik
- datenbank
0 wahsaga0 Erik0 wahsaga0 erik0 Olaf Schneider0 erik0 Olaf Schneider0 erik
0 Marcel Stör0 Hamster
Habe eine Tabelle, folgende Stuktur:
id|wert|zaehler
wenn ich nun
UPDATE tabelle SET zaehler = zaehler+1 WHERE wert = 'blub'
mache, bekomme ich dann vielleicht auch den Wert der Spalte id für den betroffenen Datensatz?
hi,
Habe eine Tabelle, folgende Stuktur:
id|wert|zaehler
Um welches DBMS geht's denn überhaupt?
wenn ich nun
UPDATE tabelle SET zaehler = zaehler+1 WHERE wert = 'blub'
mache, bekomme ich dann vielleicht auch den Wert der Spalte id für den betroffenen Datensatz?
Wieso für _den_?
Wenn du nicht über die ID (oder einen sonstigen Wert, auf dem ein Unique Index liegt) gehst, könnten es ja durchaus mehrere sein.
gruß,
wahsaga
Um welches DBMS geht's denn überhaupt?
MySQL
Wieso für _den_?
wieso nicht für _den_ ?
Wenn du nicht über die ID (oder einen sonstigen Wert, auf dem ein Unique Index liegt) gehst, könnten es ja durchaus mehrere sein.
die ID ist unique
hi,
die ID ist unique
Fein - und wo hast du in deinem UPDATE-Statement auf die ID Bezug genommen?
gruß,
wahsaga
Fein - und wo hast du in deinem UPDATE-Statement auf die ID Bezug genommen?
nirgends, das ist es ja
Könnte ich denn etwas ändern an der Abfrage, um die ID als rückgabewert zu bekommen? Die ID kenne ich vorher ja nicht.
Hallo Erik,
abgesehen davon, dass die Datenbank nicht weiss, welches Feld sie Dir zurückliefern soll, kann Dein Update-Statement ja auch beliebig viele Datensätze ändern, nämlich alle, für die wert = 'blub' ist.
Eigentlich gibt es aber auch kein Problem, da Du ja mit
SELECT id FROM tabelle WHERE wert = 'blub'
sämtliche ids mit der gleichen Bedingung geliefert bekommst.
Gruß
Olaf Schneider
sämtliche ids mit der gleichen Bedingung geliefert bekommst.
auch in der Spalte wert sind alle Werte unique, somit wird da auch immer nur einer geändert.
es gibt also keine Möglichkeit an die ID über einen Rückgabewert zu kommen?
… nicht von UPDATE.
Was ist denn das Problem an einer auf das UPDATE folgenden SELECT-Abfrage. Wenn der Wert einen UNIQUE-Index hat, ist die Abfrage doch ehe sauschnell.
Gruß
Olaf
Was ist denn das Problem an einer auf das UPDATE folgenden SELECT-Abfrage. Wenn der Wert einen UNIQUE-Index hat, ist die Abfrage doch ehe sauschnell.
mir hat jemand geschrieben das sein hoster meint das es eben da nicht so schnell ist.
Was ist denn das Problem an einer auf das UPDATE folgenden SELECT-Abfrage. Wenn der Wert einen UNIQUE-Index hat, ist die Abfrage doch ehe sauschnell.
mir hat jemand geschrieben das sein hoster meint das es eben da nicht so schnell ist.
Wenn ein Datensatz auf Basis eines UNIQUE-Indexes geholt wird, beträgt die relative Geschwindigkeit maximal O(lg(n)). Das bedeutet, dass das Heraussuchen des Datensatzes aus 1.000.000 Einträgen gerade doppelt so lange dauert wie das Heraussuchen aus 1.000 Einträgen. Je nach Datenbank können die Algorithmen vielleicht auch noch schneller sein.
Teste doch einfach selber aus, wie lange diese Abfrage wirklich dauert. Wenn dieser SELECT ein Problem darstellt, lass dir mit EXPLAIN zeigen, was bei der Abfrage passiert.
Gruß
Olaf Schneider
Habe eine Tabelle, folgende Stuktur:
id|wert|zaehler
wenn ich nun
UPDATE tabelle SET zaehler = zaehler+1 WHERE wert = 'blub'
mache, bekomme ich dann vielleicht auch den Wert der Spalte id für den betroffenen Datensatz?
Nein, sowas geht grundsätzlich nicht. Wenn du nicht direkt auf die DB zugreifst, sondern aus einer Applikation mittels Datenbankanbindung, könntest du natürlich zuerst eine Query absetzen (wert = 'blub'), dann über das result set iterieren und für jede id das update statement absetzen. Das ist allerdings - gelinde gesagt - Schwachsinn.
Gruss
Marcel
Habe eine Tabelle, folgende Stuktur:
id|wert|zaehler
wenn ich nun
UPDATE tabelle SET zaehler = zaehler+1 WHERE wert = 'blub'
mache, bekomme ich dann vielleicht auch den Wert der Spalte id für den betroffenen Datensatz?
Nein, sowas geht grundsätzlich nicht.
Man sendet zwei SQL-Statements an die DB und stellt sicher, dass diese direkt nacheinander ausgeführt werden. Das erste Statement macht das SELECT, das zweite das UPDATE bei jeweils gleicher WHERE-Klausel.
Wenn du nicht direkt auf die DB zugreifst, sondern aus einer Applikation mittels Datenbankanbindung, könntest du natürlich zuerst eine Query absetzen (wert = 'blub'), dann über das result set iterieren und für jede id das update statement absetzen. Das ist allerdings - gelinde gesagt - Schwachsinn.
Erstens ist die Iteration weder erforderlich noch sinnvoll, zweitens geht es so in einer Mehrnutzerumgebung oft nicht.