проблема с нумерацией
задали в колледже создать в MS SQL Server 2008 R2 базу данных с пятью таблицами.далее создать ограничения,внешние и уникальные ключи.вроде все получилось.но при изменении первых 200 строк IdCust и IdProd нумеруются не по очереди.например в IdCust номера 3,4,11,12,14,18.в чем может быть проблема?
Уникальные ключи в БД не нумируются постоянно с 1. Берётся последнее значение когда-либо присвоенное уникальному ключу + 1. Если тебе нужно задавать отдельный идентификатор, который будет идти попорядку, то, либо добавляй ещё один атрибут, либо задавай этот идентификатор явно в инсёрте.
большое спасибо Вам за ответ!!!а вот "задавай этот идентификатор явно в инсёрте." это как?просто только изучать начали и пока плох разбираюсь...
Гугли INSERT, UPDATE, DELETE, SELECT для MS SQL.
только вот в IdCity почему-то нумерация правильная,а в этих вот нет.ОО
Вообще, было бы очень полезно почитать хотя бы основы SQL и избавить общественность от таких нубских вопросов, в котрых самому можно разобраться.
я учусь пока.вы же тоже не с рождения про SQL знали, а тоже учились и были "нубом" когда то.
з.ы.IdCity,IdProd,IdCust это первичные ключи в своих таблицах...
Ответ на ваш вопрос простой, если по каким-либо причинам, транзакция при добавлении нового номера не завершилась успешно, то уже выделенное значение счетчика для добавления строки в этой транзакции, не сбрасывается назад. Identity гарантирует генерацию следующего номера, но не непрерывность. И в этом нет большой проблемы. По этому, вопрос, а зачем вам нужно именно по очереди?
Цитата: Shirokuro
спасибо.=))))))))
только вот в IdCity почему-то нумерация правильная,а в этих вот нет.ОО
только вот в IdCity почему-то нумерация правильная,а в этих вот нет.ОО
если нужна нумерация "правильная" - ее нужно задавать руками. Например используя специальную таблицу - пул номеров. Тогда получение идентификатора и удаление его из пула можно делать в транзакции.
Но правда и в этом случае нет гарантий что в распределенной системе ВСЕ числа будут идти по порядку, ИМХО