Viennamade: DELETE FROM mit LIMIT ?

Hallo!

Es geht um eine Löschabfrage mit MySQL. Mir ist eben aufgefallen, daß PHPMyAdmin beim Löschen eines Datensatzes den folgenden Abfragestring erzeugt und dann auch absetzt:

DELETE FROM Tabelle WHERE PrimaryKey = x LIMIT 1

Also wenn ich so eine Abfrage in PHP absetze, dann machte ich das bis dato ohne "LIMIT 1". Schließlich handelt sich ja um den PrimaryKey der ja nur einmal vorkommt.

Sah ich bis dato etwas falsch und ist das LIMIT 1 auch sinnvoll wenn mit dem =Operator ein eindeutiger Operand verglichen wird, oder wendet PHPMyAdmin diese Syntax nur aufgrund einer allgemein gehaltenen Routine an?

Beste Grüße
Viennamade

PS: Ich muß weg kann mich nicht mehr in diesem Thread einmischen, daher jetzt schon: Danke!

  1. Hello,

    doppelt genät hält besser.

    Außerdem ist das mit dem Delete sowieso mutig von den SQL-Leuten. Ichnhätte zumindest die angabe von limit oder unlimited noch erforderlich gemacht, und zwar am ENDE des Strings. Stell Dir mal vor, da geht bei der übermittlung was von diesem String verloren und es kommt nur

    delete from tabelle

    an.

    Zum Glück gibt es ja noch das Semikolon, dass bei original-SQL-Statements auch ankommen muss oder ein Commit.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  2. Hi Viennamade

    Sah ich bis dato etwas falsch und ist das LIMIT 1 auch sinnvoll wenn mit dem =Operator ein eindeutiger Operand verglichen wird, oder wendet PHPMyAdmin diese Syntax nur aufgrund einer allgemein gehaltenen Routine an?

    Du hast bisher nichts falsch gemacht. Das LIMIT 1 ist in diesem Fall nicht sinnvoll und höchst gefährlich. Wenn du über den Primärschlüssel gehst, hat es keinerlei Auswirkungen. Gehst du hingegen über ein anderes Feld wo mehrere Treffer möglich sind, wird so _zufällig_ einer gelöscht anstelle aller Treffer. LIMIT solltest du immer nur in Kombination mit ORDER BY benutzen um bestimmen zu können, welcher Datensatz herauskommt.

    LIMIT zum Löschen allgemein würde ich von abraten da nicht bei jedem DBMS ORDER BY vor LIMIT ausgeführt wird. Ich hatte sogar schon den Fall wo das Handbuch gesagt hat, ORDER BY würde vor LIMIT berücksichtigt, es aber dann doch nicht immer funktioniert hat.

    Gruss Daniela