2014-11-14 3 views
0

У меня есть таблица с этой структурой:Заполнение пустой автоматическое приращение значения

| идентификатор | имя |

идентификатор является приращением, когда я добавить новую строку в моей таблице. Например у меня есть 3 строки:

1|John 
2|Bob 
3|Alice 

Если я буду УДАЛИТЬ строку с идентификатором будет что:

1|John 
3|Alice 

Как ВСТАВИТЬ новая строка с id = если я не буду знать, какие идентификаторы пустые?
(Или - Как вставить строки с значениями неиспользуемого идентификатора (auto increment)?)
Спасибо.

+2

но это создаст проблему для вашей реляционной таблицы, почему вы хотите вставлять строки в неиспользуемый id? – Ankita

ответ

0

От documentation:

на вставке, если ROWID или столбец INTEGER PRIMARY KEY не явно присвоено значение, то оно будет заполнено автоматически с неиспользованного целое число, как правило, чем больше чем самый большой ROWID в настоящее время в использовании. Это верно независимо от того, используется ли ключевое слово AUTOINCREMENT .

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

+0

Вопрос заключается в том, как определить значение явно указанного ID. –

1

Вы можете использовать этот запрос, чтобы получить наименьший неиспользованный идентификатор.

SELECT (Min(ID) + 1) AS NewIDToInsert 
    FROM TableName T2A 
    WHERE NOT EXISTS (SELECT ID FROM TableName T2B WHERE T2A.ID + 1 = T2B.ID) 
+0

Это не работает в SQLite. –

+1

@CL .: Проверьте обновленный результат и обновите статус –

+0

Ключевое слово AUTOINCREMENT не влияет на это в любом случае. Результат '7' не соответствует вопросу. –

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