SQL Update-Query mit LIMIT?

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Hallo zusammen,

es geht um folgende SQL-Query (MySQL):

SQL:
UPDATE daten SET sts2x=TRIM(sts2x) ORDER BY id DESC LIMIT 500

Wenn ich diese Ausführe wird das Update nur in mit den letzten 500 Datensätzen
durchgeführt? Ist das korrekt? Ich möchte es ungern testen und meine Daten-
bank zerschießen, sollte es nicht so sein.

VG,
 
Als Tipp: Benutz eine Transaktion zum Testen

SQL:
BEGIN TRANSACTION
UPDATE daten SET sts2x=TRIM(sts2x) ORDER BY id DESC LIMIT 500
SELECT * FROM Daten ORDER BY ID DESC LIMIT 500
ROLLBACK TRANSACTION

Wenn alles richtig ist, ersetzt du ROLLBACK durch COMMIT, lässt es erneut laufen und alles ist tutti.

Mit ROLLBACK machst du deine Änderungen rückgängig und mit COMMIT bestätigst du die Änderungen.
 
  • Gefällt mir
Reaktionen: N00bn00b
So viel kann man mit trim() eigentlich nicht kaputtmachen....

Per transaction ist schon mal ein guter Ansatz, aber wozu das Limit?
 
Dsimon24 schrieb:
Ich möchte es ungern testen und meine Daten-
bank zerschießen, sollte es nicht so sein.
Was spricht dagegen, hier einfach die bisherige Datenbank zu exportieren und sich eine Testdatenbank anzulegen? Das ist eine Sache von Minuten. Dann kannst Du in Ruhe testen, und wenn die Testdatenbank kaputt geht, einfach wieder aus der Originalen reimportieren.
Ergänzung ()

N00bn00b schrieb:
Hmm, ein "order by" in einem Update Statement macht eigentlich keinen Sinn und ist ev. gar nicht möglich.
Es ist absolut sinnlos. ORDER BY ist nur für den select interessant.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: N00bn00b und up.whatever
Ist halt MySQL.

Besser:
SQL:
Update table Set column = Value where ...

Damit gibt man unmißverständlich an, was man möchte. Man kann auch ein sub select in Where einsetzen und so das Limit abbilden, dann mit
SQL:
update Table set column = value where Id in (
select Id from table order by key desc limit n
)
wobei natürlich [id] not null sein muß und die Unsicherheit bleibt, WAS man denn tatsächlich anfaßt.

IMVHO sollte man sich, wenn es wirklich darum geht, die ersten/letzten n Datensätze zu ändern, noch mal nachdenken und fragen ob man nicht vielleicht in einem xy Problem gefangen ist und ob man das ganze nicht irgendwie anders abbilden könnte.
 
  • Gefällt mir
Reaktionen: N00bn00b und Dalek
Sinnhaftigkeit des Ganzen mal außen vor gelassen, will ich ergänzen, dass das, über Umwege, auch innerhalb des ANSI-Standards vormulierbar ist:
SQL:
update Table1
set Field1 = Value
where Field2 in (select Field2
                 from (select first 500 Field2
                       from Table1
                       order by Field2 desc))
Der Umweg ist notwendig, da nicht alle Datenbanken das Keyword First in Subselects erlauben.
 
  • Gefällt mir
Reaktionen: N00bn00b
Zurück
Oben