Автор Тема: auto_increment  (Прочитано 4170 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
auto_increment
« : 11 Июня 2002, 20:08:51 »
Есть поле id, тип longint, значение в нем задается при помощи auto_increment.
Допустим, мы создали 5 строк, а потом удалили строку с id=4.
У нас осталась "пустота" между 3 и 5. Как сдвинуть значение? Только через update?

А следующая созданная строка будет иметь id=6. Как изменить значение для след. создаваемой строки (autoindex)?

Оффлайн Stek

  • Обожатель PHP
  • Ветеран
  • *****
  • Сообщений: 532
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.phpdevs.com
auto_increment
« Ответ #1 : 11 Июня 2002, 21:11:45 »
А зачем это ?
Насколько знаю стандартного выхода нет, если только с перезаписыванием записей в новую таблицу.
PHP без башни - сделай свою жизнь разнообразнее.
Разбираю скрипты, собираю заново, вытираю пыль с баз данных.

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
auto_increment
« Ответ #2 : 11 Июня 2002, 21:22:39 »
Понятно... так и думал. :(

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
auto_increment
« Ответ #3 : 11 Июня 2002, 22:59:49 »
Почему нет выхода? После удаления записи с id=4:
UPDATE table SET id=id-1 WHERE id>3
Только, действительно, зачем это?

А еще, если ничего не путаю, в каких-то типах таблиц (не MyISAM) такой сдвиг id есть по-умолчанию.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Stek

  • Обожатель PHP
  • Ветеран
  • *****
  • Сообщений: 532
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.phpdevs.com
auto_increment
« Ответ #4 : 12 Июня 2002, 10:29:53 »
Цитировать
Почему нет выхода? После удаления записи с id=4:
UPDATE table SET id=id-1 WHERE id>3

И так на 10,000 записей :)


Цитировать
А еще, если ничего не путаю, в каких-то типах таблиц (не MyISAM) такой сдвиг id есть по-умолчанию

Если не ошибаю, то не сдвиг, а просто следующий при вставке id получит номер удаленного... хотя что есть не правильно.
Сталкнулся один раз с таким явлением, немного ругался :)
PHP без башни - сделай свою жизнь разнообразнее.
Разбираю скрипты, собираю заново, вытираю пыль с баз данных.

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
auto_increment
« Ответ #5 : 12 Июня 2002, 11:36:06 »
Цитировать
Если не ошибаю, то не сдвиг, а просто следующий при вставке id получит номер удаленного...

интересно в каких-это таблицах ты такое нашел ...
в InnoDB и BDB такого нет, в  HEAP автоинкремент не поддерживается ...
На Машине Тьюринга далеко не уедешь.

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
auto_increment
« Ответ #6 : 13 Июня 2002, 12:11:38 »
Stek
Цитировать
не сдвиг, а просто следующий при вставке id получит номер удаленного

Да, кажется, именно так.

fidget
Я сам не разу с таким не сталкивался, но кто-то об этом писал. Но искать лень - не нужно это.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
auto_increment
« Ответ #7 : 13 Июня 2002, 16:24:09 »
Цитировать
Я сам не разу с таким не сталкивался, но кто-то об этом писал.

мне просто стало интересно и я проверила на всех типах таблиц - везде работает как обычный инкремент .. 8-[  ]
На Машине Тьюринга далеко не уедешь.

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
auto_increment
« Ответ #8 : 13 Июня 2002, 21:43:34 »
Ладно, будем знать :)
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
auto_increment
« Ответ #9 : 14 Июня 2002, 18:38:41 »
Копаясь по родной документации MySQL:
Цитировать

An integer column may have the additional attribute AUTO_INCREMENT. When you insert a value of NULL (recommended) or 0 into an AUTO_INCREMENT column, the column is set to value+1, where value is the largest value for the column currently in the table. AUTO_INCREMENT sequences begin with 1. See section 24.1.3.126 mysql_insert_id(). If you delete the row containing the maximum value for an AUTO_INCREMENT column, the value will be reused with an ISAM, or BDB table but not with a MyISAM or InnoDB table.

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
auto_increment
« Ответ #10 : 14 Июня 2002, 22:37:35 »
Хм..., интересно.

Я тоже решил проверить. Никакого "сдвига" существующих id действительно не происходит, но в таблицах ISAM и BDB после удаления записей с максимальными id и последующей вставкой новых записей эти id вновь используются. Ardzhan, спасибо, что напомнил.
Литературный перевод с русского и английского на Perl. Дорого!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28