Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Уникальность IDENTITY при удалении всех записей  [new]
shefus
Member

Откуда:
Сообщений: 116
Добрый день!
Вопрос: Есть Таблица1 с полем IDENTITY из которой все записи периодически удаляются. Будет ли гарантировано уникальным поле IDENTITY для следующих записей Таблицы1 (т.е. не повторение тех которые уже когда-нибудь были в ней, но удалены)
3 июл 13, 14:20    [14516583]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
IDENTITY никогда не гарантировала уникальности
3 июл 13, 14:22    [14516589]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
identity не гарантирует никакой уникальности. Уникальность гарантирую констрейнты или уникальные индексы.
3 июл 13, 14:22    [14516595]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
shefus
Member

Откуда:
Сообщений: 116
Ну это поле является индексированным, первичным ключом. Будет ли оно всегда уникальным?
3 июл 13, 14:25    [14516612]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
shefus
Ну это поле является индексированным, первичным ключом. Будет ли оно всегда уникальным?
В пределах таблицы - да.
3 июл 13, 14:25    [14516618]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
shefus
Member

Откуда:
Сообщений: 116
Или, как я понимаю, уникальность обеспечивается тем записям которые есть сейчас, а то что там было - нет?
3 июл 13, 14:26    [14516627]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
shefus
Ну это поле является индексированным, первичным ключом. Будет ли оно всегда уникальным?

Вы путаете уникальность и неповторяемость.
После удаления записей ничто не мешает добавить запись с удаленным значением ключа.
3 июл 13, 14:28    [14516645]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
shefus
Member

Откуда:
Сообщений: 116
Гавриленко Сергей Алексеевич,

В пределах таблицы - всегда (даже если были удалены все записи)? Репликация, восстановление базы и др. не влияют? Просто, например, для Access в случае сжатия базы уникальность не гарантируется, хотя у меня проблем не было - после сжатия поле было уникальным по отношению даже к удаленным записям.
3 июл 13, 14:30    [14516669]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
shefus
Member

Откуда:
Сообщений: 116
Glory,

Да, это я понимаю - здесь интересует неповторяемость генерируемого MSSQL значения этого поля.
3 июл 13, 14:33    [14516684]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
shefus
Member

Откуда:
Сообщений: 116
Т.е. будет ли оно всегда отличным, в том числе и по отношению к удалённым записям?
3 июл 13, 14:34    [14516692]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
shefus
Т.е. будет ли оно всегда отличным, в том числе и по отношению к удалённым записям?

И как же это _гарантировать_, если данные удалены ?
3 июл 13, 14:38    [14516730]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
shefus
Glory,

Да, это я понимаю - здесь интересует неповторяемость генерируемого MSSQL значения этого поля.
Если записи удалялись простым DELETE, то следующее неявное значение IDENTITY
будет таким же, как если бы DELETE не было.
Если Вы об этом.
PRIMARY KEY, конечно же, ни о каких удалённых (то есть, несуществующих) записях не знает.
Ему лишь бы живые значения полей ключа были бы уникальными.

Если записи удалились инструкцией TRUNCATE TABLE, то начальное значение и приращение IDENTITY
сбрасываются в начальные значения.
3 июл 13, 14:39    [14516737]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
shefus
Member

Откуда:
Сообщений: 116
Glory
shefus
Т.е. будет ли оно всегда отличным, в том числе и по отношению к удалённым записям?

И как же это _гарантировать_, если данные удалены ?


Ну как-бы да, это не совсем корректно. Я про то, что MSSQL знает о последнем использованном значении счетчика и дальше его "наращивает" и не использует значения которые уже были.

iap
Glory,

Если записи удалялись простым DELETE, то следующее неявное значение IDENTITY
будет таким же, как если бы DELETE не было.



Я как раз про это. Насколько это гарантированно? Репликация, восстановление базы .... и т.д.
3 июл 13, 14:49    [14516843]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
shefus
Ну как-бы да, это не совсем корректно. Я про то, что MSSQL знает о последнем использованном значении счетчика и дальше его "наращивает" и не использует значения которые уже были.

Если вы ничего не делаете со "счетчиком", то так и будет
Но даже это не может помешать _явно_ добавить уже удаленное значение identity
3 июл 13, 14:53    [14516869]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
shefus
Member

Откуда:
Сообщений: 116
Ок. Спасибо!
3 июл 13, 15:00    [14516919]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
shefus
Ну это поле является индексированным, первичным ключом. Будет ли оно всегда уникальным?


Всегда не будет.
Если ты не будешь сбрасывать счетчик identity, это всегда делается руками, то следующие значения будут так и генерироваться дальше, не прыгая вниз к 1.
3 июл 13, 21:06    [14519049]     Ответить | Цитировать Сообщить модератору
 Re: Уникальность IDENTITY при удалении всех записей  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
MasterZiv
shefus
Ну это поле является индексированным, первичным ключом. Будет ли оно всегда уникальным?


Всегда не будет.
Если ты не будешь сбрасывать счетчик identity, это всегда делается руками, то следующие значения будут так и генерироваться дальше, не прыгая вниз к 1.
TRUNCATE тоже сбрасывает счетчики...
3 июл 13, 22:35    [14519395]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить