Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Auto increment mySQL
 
 автор: coloboc66   (09.08.2016 в 11:27)   письмо автору
 
 

У меня в базе стоит один столбец item_id со свойством auto increment primary key.
Когда я добавляю в базу новый item, ему автоматически присваивается новый ID.
Но проблема в том, что:
Допустим, было 5 items.
Новому item было присвоено ID=6.
Но если я этот item из базы удалю, то следующему mySQL присвоит ID=7 вместо ожидаемого мной ID=6.
Почему так?
Как этого избежать?
Спасибо!

  Ответить  
 
 автор: confirm   (09.08.2016 в 16:18)   письмо автору
 
   для: coloboc66   (09.08.2016 в 11:27)
 

Как этого избежать? - зачем, какой тогда смысл в уникальности?

  Ответить  
 
 автор: coloboc66   (10.08.2016 в 08:38)   письмо автору
 
   для: confirm   (09.08.2016 в 16:18)
 

А уникальность получается из-за primary key?
Если primary key убрать, то такой проблемы не будет?

  Ответить  
 
 автор: confirm   (10.08.2016 в 09:38)   письмо автору
 
   для: coloboc66   (10.08.2016 в 08:38)
 

Если primary key убрать - попробуйте, если получится. И вообще, с чего вдруг это стало проблемой?

  Ответить  
 
 автор: coloboc66   (10.08.2016 в 10:05)   письмо автору
 
   для: confirm   (10.08.2016 в 09:38)
 

Проблема в том, что я слабо разбираюсь в понятиях, выдаваемых phpmyadmin по свойствам поля:
- первичный
-уникальный
-индекс
-пространственный
-полнотекстовый
-уникальные значения
Я должен выбрать себе одно из этих значений, так?
Но я не знаю, какое?
В столбце item_id я веду нумерацию вставляемых администратором товаров в категории.
Сначала я поставил для него primary key auto increment.
Но столкнулся с тем, что mysql сохраняет уникальную нумерацию даже после удаления товара.
Мне это не нравится.
Посоветуйте, как мне установить это поле? С какими свойствами?

  Ответить  
 
 автор: confirm   (10.08.2016 в 10:55)   письмо автору
 
   для: coloboc66   (10.08.2016 в 10:05)
 

primary key - означает первичный ключ таблицы, а auto increment формирует уникальные значения этого ключа таким образом, что они гарантировано не повторяются, то есть ранее использованное и удаленное из таблицы значение больше использоваться не будет.
У вас как раз товары, и чтобы обращаться к ним и исключить неоднозначность и требуется им уникальный идентификатор, который автоматически и обеспечивает поле с атрибутами primary key auto increment. Представьте себе, что у вас в продаже были бублики под идентификатором 23, затем их продажа прекратилась и они были удалены из базы, но добавлен новый товар - баранки. Если действовать по вашей логике, то баранки получили бы идентификатор 23. Рассказывать чем это чревато или понятно и без пояснения?

Если требуется нумерация товаров по порядку, то используйте для этого любое поле INT, инкремент в котором, а также изменения при удалении/перемещении товаров, производите сами. Хотя данного поля в общем то совсем и не нужно - указывайте дату добавления товара, и если нужно вывести их по порядку, то сортируйте запрос по этой дате (с тем же успехом можно сортировать и по ID), а нумерацию в вывод и РНР сделает. Хотя если нумерация по порядку не обязательно должна быть равна последовательности добавления товара, то вообще не понятно какие проблемы.

  Ответить  
 
 автор: coloboc66   (11.08.2016 в 11:31)   письмо автору
 
   для: confirm   (10.08.2016 в 10:55)
 

Ясно.
Значит, я всё-таки оставляю auto increment primary key.
Спасибо.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования