2012-06-10 2 views
0

Я пытаюсь удалить запись в sqlite. У меня четыре записи record1, record2, record3, запись 4 с идентификатором в качестве основного ключа.Удаление записи из таблицы sql и обновление таблицы sql

поэтому он будет автоматически увеличиваться для каждой записи, которую я вставляю. теперь, когда я удаляю запись 3, первичный ключ не уменьшается. что делать, чтобы уменьшить id на основе записей, которые я удаляю.

Я хочу, чтобы id был 1,2,3, когда я удаляю запись 3 из базы данных. теперь это 1,2,4. Есть ли какой-либо запрос sql для его изменения. Я попробовал это один

DELETE FROM TABLE_NAME WHERE name = ? 

Примечание: Я реализую в Xcode

+0

Значение столбца первичного ключа имеет ** ни смысла ** на всех. Только там однозначно идентифицировать строку. Если вы полагаетесь на отдельные значения там (например, без пробелов), то ваш дизайн ошибочен. –

ответ

1

Я не знаю, почему вы хотите это, но я бы рекомендовал оставить эти идентификаторы как. Что не так с идентификаторами, как 1,2,4? Также вы можете поменять вещи (ссылочную целостность), если вы используете эти значения идентификатора в качестве внешних ключей в другом месте.

Также, пожалуйста, обратитесь к этой странице, чтобы получить лучшее понимание того, как Autoincrement поле работает http://sqlite.org/autoinc.html

+0

На самом деле я удаляю объект массива на основе значения id. например. если я удалю запись 3, то я использую этот id (3) для удаления объекта по индексу 3 в массиве. – Anish

+0

, если id не декрементируется, а затем указывается индекс массива (id = 4). но массив имеет только 3 значения. поэтому я получаю сбой. – Anish

+1

Хммм, плохой дизайн. Представьте, если у вас есть 1mil строка, и вы хотите удалить ее - вы хотите обновить ~ 1mil строк, чтобы изменить их ID? – DmitryK

1

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

EDIT

Вы можете достичь его конструкции в специальный стол. Нет удаленных записей, но с полем «del», отмеченным как удаленное.

Например, с помощью «select ... where del> 0» вы найдете все активные записи.

Или разместите без «где» все записи, тогда идентификаторы остаются неизменными. Пропустить массив с помощью «if del = 0 continue». Таким образом, массив всегда находится в последовательном порядке.

Это очень гибкий. В зависимости от выбора ... вы получаете.

  • все активные записи
  • все удаленные записи
  • все записи
+0

На самом деле я удаляю объект массива на основе значения id. например. если я удалю запись 3, то я использую этот id (3) для удаления объекта по индексу 3 в массиве. – Anish

+0

, если id не декрементирует, тогда индекс массива (id = 4) будет выполнен. но массив имеет только 3 значения. поэтому я получаю сбой. – Anish

+2

@Anish - Это может быть то, что вы * хотите * делать, но auto-increment does * not * делает это в любых rdbms, о которых я знаю. Это может привести к серьезным проблемам ссылочной целостности. Вам нужно альтернативное решение. Если вы публикуете * почему * вы хотите сделать это, мы * можем * предложить альтернативное решение. Каковы ваши прецеденты? – MatBailie

Смежные вопросы