REINDEXを使用します。 (REINDEX はインデックス構造を再構築するだけで、実際にはインデックスの値を変更しません。)
行の順序を暗黙的なインデックスとして使用する
行全体のインデックス値を変更しようとするのではなく、並べ替え順序のマッピングを実行してみませんか?
次のような SELECT ステートメントを使用します。
NSString* query = @"SELECT * FROM myTable ORDER BY id LIMIT 1 OFFSET %d";
query = [NSString stringWithFormat:query, indexPath.row + 1];
行を削除するには、次のようにします。
NSString* query = @"DELETE FROM myTable WHERE ID = (SELECT ID FROM myTable ORDER BY ID LIMIT 1 OFFSET %d)";
query = [NSString stringWithFormat:query, indexPath.row + 1];
INSERT するには、通常どおり通常の挿入を実行します。
この方法では、1 つの行を削除するときに、削除する行よりも大きい ID を持つすべての行を編集する必要がなくなります。これにより、はるかに高速になります。
テーブル ビューと DB の一貫性を保つために、DB で変更が発生するたびにテーブル ビューを更新してください。
これには、テーブル ビューの並べ替えを維持するという優れた副作用もあります。
影響を受けるインデックスを変更するトリガーを定義する
完全なシリーズになるようにインデックスを保持したい場合 (例: 1,2,3,4,...)
次のように削除トリガーを定義できます。
CREATE TRIGGER reindex AFTER DELETE ON myTable FOR EACH ROW
BEGIN
UPDATE myTable SET ID = old.ID - 1 WHERE ID > old.ID;
END;