| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > смещаемый id (БД MySQL) |
| Автор: IZ@TOP 18.3.2003, 00:26 | ||
| ----- BD MySQL ----- Вопрос: как сделать так чтоб при удалении строки из таблицы, номер йд следующей за ней строкой принимал значение удаленной и те за ней так же меняли например:
При обьяве (id int not null auto_increment,text text,primary key(id)) он еще и при удалении допустим значений 20 ,добавленную строку помечает id = 21 а мне нужно чтоб смещалось ! Плз ПОМОГИТЕ, ЧТО ДЕЛАТЬ |
| Автор: Medved 18.3.2003, 05:00 |
| А зачем? На то аутокримент и существует, чтобы не повторялись ключевые значения. |
| Автор: IZ@TOP 18.3.2003, 17:34 | ||
А мне нужно чтобы при удалении он смещался ! |
| Автор: SmaLL 18.3.2003, 17:37 | ||||
Автоинкрементное поле не сдвинется! Хоть тресни! |
| Автор: AntonSaburov 18.3.2003, 19:05 |
| Если надо иметь такой ID - то стОит задуматься о перепроектировании. А если надо просто ну никак - бшлокируешь таблицу и сразу после удаления (обозначим удаленный id как id_deleted) update TABLE set id=id-1 where id>id_deleted Хотя я настоятельно рекомендую посмотреть вариант, чтобы этого не делать. |
| Автор: IZ@TOP 18.3.2003, 19:40 |
| Ладно, спасибо за информацию. И у меня тут созрел еще один вопрос: А как сделать чтоб ID генерился из четырех-пяти значных чисел ? |
| Автор: AntonSaburov 18.3.2003, 20:51 | ||
А что, целое 32 бита таких величин не поддерживает ? |
| Автор: IZ@TOP 18.3.2003, 21:33 |
| AntonSaburov может ты меня не так понял, мне надо что бы id не с 1 генерилось а уникальные вроде там 4679 следующее число 7583 ну и тд. |
| Автор: AntonSaburov 18.3.2003, 21:55 | ||
Не без этого А как ты генеришь сейчас ? |
| Автор: Oleg 18.3.2003, 22:49 |
| Я вроде понял, у меня тоже такое было, правда не на MySQL, но я бы сделал id не аутоинкремент, а просто длинным целым , и процедуру, котороая в цикле пробегала бы всю таблицу (или нижний кусок после удаленной записи )и меняла бы id условно говоря: ... for i:= 1 to table.recordcount do begin table.recno:= i; id:= i end; ... что-то вроде этого. |
| Автор: U-gene 20.3.2003, 05:58 |
| Хоть тресни, не могу ВООБЩЕ понять, зачем такое поле надо. Ссылаться на него нельзя (в следущий раз можно попасть на другую запись), что бы число записей в таблице посмотеть - так это через COUNT можно сделать. Никакой полезной информации оно ИМХО нести не может, поскольку меняется. Например, пользователь сегодня видит одну 20-ю запись, а завтра 20-ой окажеться другая запись. Ежели не секрет, поделитесь, зачем оно? |
| Автор: IZ@TOP 20.3.2003, 17:36 |
| Да была одна мысль ... но я думаю действительно геморойничать не к чему ... |
| Автор: AntonSaburov 20.3.2003, 18:05 | ||
Вот это правильно |