Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 196
от 25.12.2006, 17:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 388, Экспертов: 42
В номере:Вопросов: 1, Ответов: 2


Вопрос № 67859: У меня: Microsoft SQL Enterprise Manager Version: 8.0 Есть Таблица Users . В ней есть ID, FName, LName и так далее. Иногда у меня удаляются записи, то есть идет ID=4, а потом ID=6. Как можно с помощью SQL запроса , "обновить&...

Вопрос № 67.859
У меня:
Microsoft SQL Enterprise Manager Version: 8.0
Есть Таблица Users .
В ней есть ID, FName, LName и так далее.
Иногда у меня удаляются записи, то есть идет ID=4, а потом ID=6.
Как можно с помощью SQL запроса , "обновить" таблицу, что бы числа шли по порядку?
Либо средствами Enterprise Manager?
(Поиск в нете делал и все свои книжки просматривал.)
Спасибо заранее.
Отправлен: 20.12.2006, 17:13
Вопрос задал: Logicpc (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Logicpc!

1) Это бесмысслено, так как в классической теории БД записи располагаются в таблице ПРОИЗВОЛЬНО. Т.е. любая работа с таблицами не предполагает какого-либо порядка записей. Правда это не мешает отсортировать результат запроса в нужном порядке, но именно результат.
2) Если зачем-то нужно упаковать значения полей, чтобы значения поля шли по порядку, без дырок, то можно написать хранимую процедуру, которая в цикле просмотрит всю таблицу и изменит значения этих полей в нужном порядке.
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Ответ отправлен: 20.12.2006, 17:25

Отвечает: Игорь Елизаров
Здравствуйте, Logicpc!
Это происходит из-за того, что поле ID ключевое с автоинкрементом.
Если есть связи с другими таблицами, то это поле лучше не трогать, даже больше -
в этом случае категорически запрещено его менять, иначе нарушится целостность данных во всей базе.

Если таких связей нет, и действительно очень важно, чтобы не было дыр,то можно сделать поиграв со структурой таблицы Enterprice Manager.
- самым первым полем заводите новое поле ID1
- c поля ID снимаете автоинкремент и ключ
- на поле ID1 ставите автоинкремент и ключ
- сохраняете изменения

- затем необходимо удалить поле ID (или переименовать в ID_old)
- переименовать Id1 в ID
подобного эффекта можно также достичь, скопировав данные (кроме ID) в таблицу аналогичной структуры, а затем переименовав таблицу.

попробуйте.
как видите, в принципе это выполнимо, если сильно надо. Просто обычно этого никто не делает, внутренние идентификаторы системы обычно нигде не выводятся и не отображаются, поэтому какое у них значение абсолютно все равно.
Ответ отправил: Игорь Елизаров (статус: 8-ой класс)
Ответ отправлен: 21.12.2006, 09:32


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.38 от 20.12.2006
Яндекс Rambler's Top100

В избранное