Обновление строк в порядке с SQL - PullRequest
0 голосов
/ 20 марта 2012

У меня есть таблица с 4 столбцами.Первый столбец уникален для каждой строки, но это строка (формат URL).Я хочу обновить свою таблицу, но вместо использования "ГДЕ" я хочу обновить строки по порядку.Первый запрос обновит первую строку, второй запрос обновит вторую строку и т. Д.

Какой для этого код SQL?Я использую Sqlite.

Редактировать: Моя схема таблицы

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

Edit2: Сейчас я делаю цикл запросов SQL

обновление таблицы набораviews = 5, click = 10 где url = "http://someurl.com";

В базе данных содержится около 4 миллионов записей. На моем сервере для обновления требуется около 16 секунд. Поскольку цикл обновляет строку по порядку,первый запрос обновляет первую строку; я думаю, если бы обновление строк по порядку могло бы быть быстрее, чем использование предложения WHERE, которое должно просмотреть 4 миллиона строк.

1 Ответ

1 голос
/ 20 марта 2012

Вы не можете делать то, что хотите, без использования WHERE, поскольку это способ only для выбора строк в таблице для чтения, обновления или удаления. Итак, вы захотите использовать:

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

ОДНАКО ... SqlLite имеет дополнительную функцию - автоматически генерируемый столбец , ROWID . Вы можете использовать этот столбец в запросах. Вы не видите эти данные по умолчанию, поэтому, если вы хотите, чтобы данные были в них, вам нужно явно запросить их, например:

SELECT ROWID, * FROM table

Это означает, что вы можете делать то, что хотите, ссылаясь на этот столбец напрямую:

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

вам все еще нужно использовать предложение WHERE, но это позволяет вам получать доступ к строкам в порядке вставки, ничего не делая.

CAVEAT
ROWID эффективно хранит порядок строк INSERT. Если вы удалите строки из таблицы, ROWID для оставшихся строк изменится NOT - следовательно, в последовательности ROWID могут быть пропуски. Это сделано специально, и нет никакого обходного пути, кроме повторного создания таблицы и повторного заполнения данных.

Портативность
Обратите внимание, что это относится только к SQLite - вы не сможете сделать то же самое с другими механизмами SQL, если вам когда-либо понадобится перенести это. Гораздо лучше добавить колонку с автоматическим номером EXPLICIT (также известную как поле IDENTITY), которую вы можете использовать и управлять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...