nike90
29.01.2015 - 13:52
Здравствуйте!
Можно ли средствами MySQL сделать, что бы новая запись с auto increment ID всегда увеличивалась и не перезаписывала ранее удаленные ID, что бы ID был всегда уникальный в плане (к примеру есть продукт с ID 10 и он был удален, что бы спустя время на его место не записался новый продукт на ID 10).
Заранее спасибо.
nike90, ничего не нужно делать, auto_increment работает именно так как вы описали.
kristall
29.01.2015 - 14:13
А оно разве сразу из коробки не так?
_____________
echo '<pre>',print_r($var, 1);die;
root@server# make love && war
nike90
29.01.2015 - 14:28
В innoDb если было 1,2,3,4,5, удалили 5, перезапустили сервер, следующий номер будет опять 5.
nike90, зато в innodb есть внешние ключи, которые нивелируют эту проблему. Если рассматривать только в контексте базы данных
nike90
29.01.2015 - 14:41
Еще я не раз сталкивался, что auto_increment мне перезаписывает ранее удаленные ID, ранее этому значения не придавал, а теперь не пойму как это происходит, не могу повторить ситуацию ....
nike90, в документации написано, что после запуска сервера при первой вставке выполняется запрос SELECT MAX(ai_col) FROM t FOR UPDATE; , после чего значение хранится в оперативной памяти. Т.е. достаточно, как ты уже сказал выше, перезапустить сервер, чтобы "сбросить" значение.
http://dev.mysql.com/doc/refman/5.0/en/inn...t-handling.html
bestxp
29.01.2015 - 15:14
ну ответ резонный не использовать MySQL это уже даже назвать БД сложно, используй PostgreSQL если ты не хочешь проблем в будущем
nike90
29.01.2015 - 15:25
Цитата (kaww @ 29.01.2015 - 10:46) |
nike90, в документации написано, что после запуска сервера при первой вставке выполняется запрос SELECT MAX(ai_col) FROM t FOR UPDATE; , после чего значение хранится в оперативной памяти. Т.е. достаточно, как ты уже сказал выше, перезапустить сервер, чтобы "сбросить" значение. http://dev.mysql.com/doc/refman/5.0/en/inn...t-handling.html |
Так мне не нужно перезагружать сервер, мне нужно решить хотя бы проблему с замещением ранее удаленных ID.
Valick
29.01.2015 - 15:27
Цитата |
Так мне не нужно перезагружать сервер, мне нужно решить хотя бы проблему с замещением ранее удаленных ID |
есть очень старый и простой вариант не удалять их, а просто помечать как удалённые
_____________
Стимулятор ~yoomoney - 41001303250491
nike90
29.01.2015 - 16:13
Цитата |
есть очень старый и простой вариант не удалять их, а просто помечать как удалённые |
Это не вариант, так как будет много мусора в БД
А что если не перезапускать сервер после каждого удаления строк? Ну удалил пару строк и ничего страшного! БД работает также, сервер также поддерживает БД. Автоинкремент будет устанавливать значение большее на 1 от предидущего записанного в БД значения так, как описывает nike90.
Или надо все таки каждый раз перезапускать сервер?
_____________
Трус не играет в хокей
Valick
29.01.2015 - 18:47
Цитата |
Или надо все таки каждый раз перезапускать сервер? |
подозреваю что он у тс время от времени падает
_____________
Стимулятор ~yoomoney - 41001303250491
johniek_comp
29.01.2015 - 21:09
Valickтак они и так помечаются по умолчанию, и не удаляются.
_____________
Valick
29.01.2015 - 21:43
johniek_comp, я хз что там у ТС
_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.