База данных SQLite .. это значение первичного ключа, если я удаляю строку из таблицы - PullRequest
2 голосов
/ 27 февраля 2012

предположим, что я изначально строю таблицу из 10 строк.Значит, значение id (столбец первичного ключа) в конце будет 9 или 10?и теперь предположим, что я удаляю строку №.5 и 8 (при условии, что количество строк начинается с 1) и добавьте еще одну строку, так что теперь у меня всего 9 строктеперь, что будет со значениями id в каждой строке .?

      db.delete(DBAdapter.TableName, "Id=? AND QstnrId=? AND QstnId=?",
      new String[] { Id.toString(), QuestionnaireId, QuestionId });

Ответы [ 3 ]

5 голосов
/ 27 февраля 2012

значения id для более ранних строк останутся прежними ...

Для новых он начнется с 10/11 ...

поэтому список идентификаторов будет: 1 2 3 4 6 7 9 10 11 12, .... as in every other SQL Database

3 голосов
/ 27 февраля 2012

В столбце первичного ключа автоинкремента *1002* в SQLite используется значение на 1 больше, чем наибольшее значение, которое когда-либо использовалось в таблице:

С документация :

Если столбец имеет тип INTEGER PRIMARY KEY AUTOINCREMENT, то используется немного другой алгоритм выбора ROWID. ROWID, выбранный для новой строки, как минимум на единицу больше, чем самый большой ROWID, который когда-либо существовал в этой же таблице. Если таблица никогда ранее не содержала никаких данных, то используется ROWID, равный 1. Если в таблице ранее содержалась строка с наибольшим возможным ROWID, новые INSERT не допускаются, и любая попытка вставить новую строку завершится неудачно с ошибкой SQLITE_FULL.

Таким образом, удаление строки не влияет на следующий сгенерированный идентификатор.

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

Кроме того, удаление строки не изменит значения другой строки, поэтому, если у вас есть идентификаторы 1, 2, 3, 4 и вы удалите строку с идентификатором 1, оставшиеся строки по-прежнему будут иметь идентификаторы 2, 3, 4. Автоинкремент - это просто способ сделать вставки проще.

1 голос
/ 27 февраля 2012

Старые значения идентификатора не будут затронуты.

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