Forum Webscript.Ru

Общие => Базы данных => Тема начата: Ardzhan от 11 Июня 2002, 20:08:51

Название: auto_increment
Отправлено: Ardzhan от 11 Июня 2002, 20:08:51
Есть поле id, тип longint, значение в нем задается при помощи auto_increment.
Допустим, мы создали 5 строк, а потом удалили строку с id=4.
У нас осталась "пустота" между 3 и 5. Как сдвинуть значение? Только через update?

А следующая созданная строка будет иметь id=6. Как изменить значение для след. создаваемой строки (autoindex)?
Название: auto_increment
Отправлено: Stek от 11 Июня 2002, 21:11:45
А зачем это ?
Насколько знаю стандартного выхода нет, если только с перезаписыванием записей в новую таблицу.
Название: auto_increment
Отправлено: Ardzhan от 11 Июня 2002, 21:22:39
Понятно... так и думал. :(
Название: auto_increment
Отправлено: YA от 11 Июня 2002, 22:59:49
Почему нет выхода? После удаления записи с id=4:
UPDATE table SET id=id-1 WHERE id>3
Только, действительно, зачем это?

А еще, если ничего не путаю, в каких-то типах таблиц (не MyISAM) такой сдвиг id есть по-умолчанию.
Название: auto_increment
Отправлено: Stek от 12 Июня 2002, 10:29:53
Цитировать
Почему нет выхода? После удаления записи с id=4:
UPDATE table SET id=id-1 WHERE id>3

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


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

Если не ошибаю, то не сдвиг, а просто следующий при вставке id получит номер удаленного... хотя что есть не правильно.
Сталкнулся один раз с таким явлением, немного ругался :)
Название: auto_increment
Отправлено: fidget от 12 Июня 2002, 11:36:06
Цитировать
Если не ошибаю, то не сдвиг, а просто следующий при вставке id получит номер удаленного...

интересно в каких-это таблицах ты такое нашел ...
в InnoDB и BDB такого нет, в  HEAP автоинкремент не поддерживается ...
Название: auto_increment
Отправлено: YA от 13 Июня 2002, 12:11:38
Stek
Цитировать
не сдвиг, а просто следующий при вставке id получит номер удаленного

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

fidget
Я сам не разу с таким не сталкивался, но кто-то об этом писал. Но искать лень - не нужно это.
Название: auto_increment
Отправлено: fidget от 13 Июня 2002, 16:24:09
Цитировать
Я сам не разу с таким не сталкивался, но кто-то об этом писал.

мне просто стало интересно и я проверила на всех типах таблиц - везде работает как обычный инкремент .. 8-[  ]
Название: auto_increment
Отправлено: YA от 13 Июня 2002, 21:43:34
Ладно, будем знать :)
Название: auto_increment
Отправлено: Ardzhan от 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.
Название: auto_increment
Отправлено: YA от 14 Июня 2002, 22:37:35
Хм..., интересно.

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