sqlite shift rowid в нескольких записях - PullRequest
0 голосов
/ 25 апреля 2019

Здравствуйте, у меня есть sqlite db со многими записями, такими как запись 10540, они упорядочены по времени создания, я хочу сместить, как запись посередине, и хотел бы сделать это автоматически

например:

select * from table1 where id >= 8521; 
UPDATE Table1 SET id = id +1 ;

не работает, я получаю Ошибка: Результат: Не удалось выполнить уникальное ограничение: поэтому я хочу переместить все записи с 8521 до последней записи и получить место в 8520 месте, например, чтобы я мог вставить свою запись в это место таблицы. даже

id = select max(id)+1

не работает, как я могу увеличить идентификатор из последней записи до нужной записи, чтобы я мог поставить место в записях db

1 Ответ

0 голосов
/ 25 апреля 2019

Простой оператор обновления потерпит неудачу, поскольку он попытается создать повторяющиеся значения в первичном ключе.Что вы можете сделать, это:Сначала обновите столбец до отрицательных значений, которые они должны иметь:

update table1
set id = -(id + 1)
where id > 8520;

Теперь нет дубликатов, и вам просто нужно обновить до положительных значений:

update table1
set id = -id
where id < 0; 

Этосделает свое дело, но любой вид обновления первичного ключа - , а не рекомендуемая практика

...