/ / Aktualisieren der Zeilen in der angegebenen Reihenfolge mit SQL - SQL, SQLite

Aktualisieren von Zeilen in der Reihenfolge mit SQL - SQL, SQLite

Ich habe eine Tabelle mit 4 Spalten. Die erste Spalte ist für jede Zeile eindeutig, es handelt sich jedoch um eine Zeichenfolge (URL-Format). Ich möchte meine Tabelle aktualisieren, aber anstatt "WHERE" zu verwenden, möchte ich die Zeilen der Reihe nach aktualisieren. Die erste Abfrage aktualisiert die erste Zeile, die zweite Abfrage aktualisiert die zweite Zeile und so weiter.

Wie lautet der SQL-Code dafür? Ich verwende Sqlite.

Bearbeiten: Mein Tabellenschema

CREATE table (
url varchar(150),
views int(5),
clicks int(5)
)

Edit2: Was ich gerade mache, ist eine Schleife von SQL-Abfragen

Aktualisieren Sie die Tabellenset-Ansichten = 5, klicken Sie auf = 10, wobei url = "http://someurl.com";

Die Datenbank enthält rund 4 Millionen Datensätze. Es dauert ungefähr 16 Sekunden auf meinem Server, um das Update durchzuführen. Da die Schleife die Zeile in der angegebenen Reihenfolge aktualisiert, aktualisiert die erste Abfrage die erste Zeile Klausel, die 4 Millionen Zeilen durchsuchen muss.

Antworten:

1 für die Antwort № 1

Sie können nicht tun, was Sie wollen, ohne WHERE zu verwenden, da dies das ist nur Möglichkeit, Zeilen aus einer Tabelle zum Lesen, Aktualisieren oder Löschen auszuwählen. Sie möchten also Folgendes verwenden:

UPDATE table SET url = ... WHERE url = "<whatever>"

JEDOCH... SqlLite hat eine zusätzliche Funktion - die automatisch erzeugte Säule, ROWID. Sie können diese Spalte in Abfragen verwenden. Sie sehen diese Daten standardmäßig nicht. Wenn Sie also die Daten darin haben möchten, müssen Sie sie explizit anfordern, z.

SELECT ROWID, * FROM table

Dies bedeutet, dass Sie möglicherweise in der Lage sind, auf diese Spalte direkt zu verweisen, was Sie möchten:

UPDATE table SET url = ... WHERE ROWID = 1

Sie müssen noch die verwenden WHERE Klausel, aber dies ermöglicht Ihnen den Zugriff auf die Zeilen in der Reihenfolge des Einfügens, ohne etwas anderes zu tun.

VORBEHALT
ROWID speichert effektiv die INSERT Reihenfolge der Zeilen. Wenn Sie Zeilen aus der Tabelle löschen, werden die ROWIDs für die verbleibenden Zeilen übernommen NICHT change - daher ist es möglich, Lücken in der ROWID-Sequenz zu haben. Dies ist beabsichtigt und es gibt keinen Workaround, um die Tabelle neu zu erstellen und die Daten neu aufzufüllen.

PORTABILITÄT
Beachten Sie, dass dies nur für SQLite gilt - Sie könnennicht in der Lage sein, dasselbe mit anderen SQL-Engines zu tun, falls Sie dies jemals portieren müssen. Es wäre VIEL besser, eine EXPLICIT - Autonummer - Spalte (auch bekannt als IDENTITY Feld), die Sie verwenden und verwalten können.