/ / Aktualizacja wierszy w kolejności za pomocą SQL-sql, sqlite

Aktualizacja wierszy w kolejności za pomocą SQL - sql, sqlite

Mam stół z 4 kolumnami. Pierwsza kolumna jest unikalna dla każdego wiersza, ale jest to ciąg (format URL). Chcę zaktualizować moją tabelę, ale zamiast używać „GDZIE”, chcę zaktualizować wiersze w kolejności. Pierwsze zapytanie zaktualizuje pierwszy wiersz, drugie zapytanie zaktualizuje drugi wiersz i tak dalej.

Jaki jest kod SQL? Używam Sqlite.

Edytuj: Mój schemat tabeli

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

Edit2: To, co teraz robię, to pętla zapytań SQL

widoki zestawu aktualizacji tabeli = 5, kliknij = 10 gdzie url = "http://someurl.com";

W bazie danych znajduje się około 4 milionów rekordów. Aktualizacja zajmuje około 16 sekund na moim serwerze. Ponieważ pętla aktualizuje wiersz w kolejności, więc pierwsze zapytanie aktualizuje pierwszy wiersz; klauzula, która musi przeglądać 4 miliony wierszy.

Odpowiedzi:

1 dla odpowiedzi № 1

Nie możesz robić tego, co chcesz bez używania WHERE, ponieważ jest to tylko sposób wybierania wierszy z tabeli do odczytu, aktualizacji lub usuwania. Więc będziesz chciał użyć:

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

JEDNAK... SqlLite ma dodatkową funkcję - automatycznie wygenerowana kolumna, ROWID. Możesz użyć tej kolumny w zapytaniach. Nie widzisz tych danych domyślnie, więc jeśli chcesz, aby dane w nich zawarte, musisz je wyraźnie zażądać, np .:

SELECT ROWID, * FROM table

Oznacza to, że możesz zrobić to, co chcesz odnieść bezpośrednio do tej kolumny:

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

nadal musisz użyć WHERE klauzula, ale pozwala to uzyskać dostęp do wierszy w kolejności wstawiania bez robienia niczego innego.

CAVEAT
ROWID skutecznie przechowuje INSERT kolejność wierszy. Jeśli usuniesz wiersze z tabeli, wiersze ROWID dla pozostałych wierszy będą NIE zmiana - stąd możliwe jest posiadanie luk w sekwencji ROWID. Jest to zgodne z projektem i nie ma obejścia tego problemu, polegającego na ponownym utworzeniu tabeli i ponownym wypełnieniu danych.

RUCHLIWOŚĆ
Pamiętaj, że dotyczy to tylko SQLite - możesznie możesz zrobić tego samego z innymi silnikami SQL, jeśli kiedykolwiek będziesz musiał to zrobić. O wiele lepiej byłoby dodać kolumnę z automatycznym numerem EXPLICIT (aka IDENTITY pole), którego możesz używać i zarządzać.