Как заставить строки использовать идентификатор строки удаленной строки с более низким идентификатором строки, чем они?

Как убедиться, что удаленные идентификаторы строк заменены идентификаторами строк, которые следуют за ними? Вот пример:

CREATE TABLE test_table (
    test_id INTEGER PRIMARY KEY,
    test_name TEXT NOT NULL
);

INSERT INTO test_table (test_name)
VALUES ('A', 'B', 'C', 'D', 'E', 'F');

DELETE FROM test_table WHERE test_name = 'C';

Теперь результаты такие:

test_id test_name 1 А 2 Б 4 Д 5 Е 6 Ф

Как сделать, чтобы строки, следующие за удаленной строкой, закрывали неиспользуемый идентификатор строки перед ними? Что-то вроде этого:

test_id test_name 1 А 2 Б 3 Д 4 Е 5 Ф

Какую проблему вы пытаетесь решить? Почему наличие пробелов может быть проблемой? Изменение сверхурочной работы id для той же записи обычно является очень плохой идеей. (хотя иногда возможно повторное использование старых неиспользуемых идентификаторов)

Laurent S. 11.12.2020 13:07
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не хотите этого делать. Во-первых, rowid — это внутренний идентификатор строки в таблице. Он отображается для пользователей, но его цель — предоставить уникальный идентификатор, а не номер без пропусков.

Во-вторых, если вам нужен номер без пропусков, просто используйте row_number():

select t.*, row_number() over (order by test_id) as gapless_test_id
from test_table t;

Почему изменение идентификатора в куче строк — плохая идея? Столбец rowid обычно является первичным ключом в таблице, где он определен. Первичный ключ должен быть стабильным. Его можно использовать для ссылок на внешние ключи в других таблицах. Вам не нужно изменять все таблицы в базе данных только потому, что вы удалили строку в одной из центральных таблиц.

Кроме того, первичные ключи должны быть стабильными во времени. Если вы заметили, что test_id = 3 имеет какое-то конкретное свойство, вы хотите, чтобы «3» завтра ссылалась на ту же строку.

Другие вопросы по теме