Forum Webscript.Ru
Общие => Базы данных => Тема начата: Ardzhan от 11 Июня 2002, 20:08:51
-
Есть поле id, тип longint, значение в нем задается при помощи auto_increment.
Допустим, мы создали 5 строк, а потом удалили строку с id=4.
У нас осталась "пустота" между 3 и 5. Как сдвинуть значение? Только через update?
А следующая созданная строка будет иметь id=6. Как изменить значение для след. создаваемой строки (autoindex)?
-
А зачем это ?
Насколько знаю стандартного выхода нет, если только с перезаписыванием записей в новую таблицу.
-
Понятно... так и думал. :(
-
Почему нет выхода? После удаления записи с id=4:
UPDATE table SET id=id-1 WHERE id>3
Только, действительно, зачем это?
А еще, если ничего не путаю, в каких-то типах таблиц (не MyISAM) такой сдвиг id есть по-умолчанию.
-
Почему нет выхода? После удаления записи с id=4:
UPDATE table SET id=id-1 WHERE id>3
И так на 10,000 записей :)
А еще, если ничего не путаю, в каких-то типах таблиц (не MyISAM) такой сдвиг id есть по-умолчанию
Если не ошибаю, то не сдвиг, а просто следующий при вставке id получит номер удаленного... хотя что есть не правильно.
Сталкнулся один раз с таким явлением, немного ругался :)
-
Если не ошибаю, то не сдвиг, а просто следующий при вставке id получит номер удаленного...
интересно в каких-это таблицах ты такое нашел ...
в InnoDB и BDB такого нет, в HEAP автоинкремент не поддерживается ...
-
Stek
не сдвиг, а просто следующий при вставке id получит номер удаленного
Да, кажется, именно так.
fidget
Я сам не разу с таким не сталкивался, но кто-то об этом писал. Но искать лень - не нужно это.
-
Я сам не разу с таким не сталкивался, но кто-то об этом писал.
мне просто стало интересно и я проверила на всех типах таблиц - везде работает как обычный инкремент .. 8-[ ]
-
Ладно, будем знать :)
-
Копаясь по родной документации 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.
-
Хм..., интересно.
Я тоже решил проверить. Никакого "сдвига" существующих id действительно не происходит, но в таблицах ISAM и BDB после удаления записей с максимальными id и последующей вставкой новых записей эти id вновь используются. Ardzhan, спасибо, что напомнил.