2017-06-11 1 views
0

Ich möchte eine Zeile in der db-Tabelle einfügen, so dass die neu eingefügte Zeile die erste Zeile ist, die auf SELECT * FROM Tabellenname angezeigt wird?Wie man den Datenbankeinsatz bestellt?

In der Regel DB Einfügen wird eine Zeile1 unterhalb einer vorhandenen Zeile0 einfügen und Select-Anweisung zuerst r0 und dann r1 zurückgeben. Mit anderen Worten, verhält sich wie eine Warteschlange.

Jetzt möchte ich r2 einfügen, so dass r2 vor r0 angezeigt wird?

+0

ist Einfügen wirklich wichtig? Der Gedanke sollte so gehandhabt werden, wie Sie ihn anzeigen. – maSTAShuFu

+4

Wenn Sie * in Ihrem 'SELECT' keine explizite' ORDER BY' angeben, dann ist die Reihenfolge der zurückgegebenen Zeilen ** undefined ** und kann nicht garantiert werden. Es ist absolut sinnlos, * INSERT' zu bestellen - die einzige Möglichkeit, die Reihenfolge zu erreichen, besteht darin, explizit eine 'ORDER BY'-Klausel für 'SELECT' zu definieren. –

+1

füge eine row1 unter eine existierende row0 ein und die select-Anweisung würde zuerst r0 und dann r1 zurückgeben. Mit anderen Worten verhält sie sich wie eine Warteschlange. ". Nein, das ist völlig falsch. –

Antwort

3

Die Reihenfolge eines Auswahlsatzes ohne ORDER BY-Klausel ist nicht deterministisch und kann bei jeder Abfrage der Daten abweichen. Der richtige Weg, um das zu erreichen, was Sie verlangen, ist die Verwendung von ORDER BY im SELECT-Satz und eine Spalte, die den Rang des Ergebnisses in der Tabelle und der Reihenfolge nach dieser Spalte enthält. Zur besseren Leistung könnte diese Spalte als gruppierter Index verwendet werden.

Verwandte Themen