@andishub

Как произвести сортировку в таблице SQLite3, после удаления записи?

как произвести сортировку в SQLite, если пользователь решил удалить любую запись.
Например: Есть таблица А:

id| name
--| --
1 | John
2 | Mary
3 | Peter
4 | Paul
5 | David


И в этой таблице решили удалить запись с id 3, то получится так:
id| name
--| --
1 | John
2 | Mary
4 | Paul
5 | David


Как можно изменить порядок id так, чтобы Paul стал с id 3, а David с id 4?

Знаю про этот способ:
UPDATE table_name
SET id = id + 1
WHERE id > 3;

Но его костыль в том, что он может работать с условием того, что пользователь удалить запись конкретно с id 3. Есть ли другие решения, которые могут сработать при условии удаления любой записи с любым id?
  • Вопрос задан
  • 188 просмотров
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
Ты просто не понимаешь сути первичного ключа.
Это значение, которое однозначно идентифицирует строку, независимо от наличия и количества других строк в таблице. И точка. Он не должен меняться вообще за время жизни строки.
Бывают случаи, когда у нас уже есть уникальное значение, которое можно использовать как ключ.
Но куда чаще используются синтетические ключи, т.е. просто числа, которые пользователь по-хорошему и видеть-то не должен никогда. А раз так, то какая разница, есть ли дырки в нумерации?
Я больше скажу, иногда сплошная нумерация - это слабое место в системе.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Все базы данных хранят строки не так как Excel. Хранят как предписано в файловом
формате для целевой DBMS. Когда удаляешь - обычно
остаются дырки которые потом заполняются другими строками. Но это я упрощенно рассказываю.
В реальности все еще сложнее. И есть процессы вакуума или другой релокации строк. И таблица
может двигаться в памяти. Шаффлиться. Делиться на части. Кластеризоваться и т.п.

Поэтому твоя хотелка достигается только с использованием order by.

Все остальные способы не работают потому что язык SQL не дает никаких гарантий относительно
физического упорядочивания строк.

UPD: Для авто-нумерации https://stackoverflow.com/questions/16847574/how-t...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы