За последние 24 часа нас посетили 22875 программистов и 1260 роботов. Сейчас ищут 640 программистов ...

Вопрос по поводу БД

Тема в разделе "PHP и базы данных", создана пользователем Qeuvec, 4 апр 2020.

Метки:
  1. Qeuvec

    Qeuvec Новичок

    С нами с:
    3 апр 2020
    Сообщения:
    10
    Симпатии:
    0
    У БД стоит автоинкремент первичного ключа
    Всё было хорошо до тех пор, как я не начал удалять старые записи. Счётчик автоинкремента пошёл дальше и получилось как на скриншоте..

    Можно ли как то это поправить?o_OПользуюсь phpmyadmin
    Было бы неплохо и для моего будущего SQL запроса на php найти ответ..
     

    Вложения:

  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    Чем вам это мешает? Это не нужно менять....
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @ADSoft, судя по недавней теме, ТС сам пытается формировать id :)
    --- Добавлено ---
    @Qeuvec, не пытайтесь формировать id самостоятельно, доверьтесь мускулу. Да, разрывы будут в результате удаления. Но по крайней мере не будет неожиданных блокировок в результате смешения методов.
    --- Добавлено ---
    Или по крайней мере возьмите за правило не формировать самостоятельно id, равные или большие тек. значения автоинкрементального счетчика ;)
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    В принципе ничего не мешает убрать автоинкремент (см. alter table ...) или пересоздать таблицу без автоинкремента ;)
     
  5. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Qeuvec, как сказал один очень умный человек: "Не трогайте id он не ваш."
     
    SibBear и Qeuvec нравится это.
  6. Qeuvec

    Qeuvec Новичок

    С нами с:
    3 апр 2020
    Сообщения:
    10
    Симпатии:
    0
    Так нет же. Я его просто МОГУ сам вставлять, но не делаю этого обычно.
    Но так как сейчас после 5 ID идёт 26, то это эстетически некрасиво.. а на их последовательность в таблице мне всё равно, так как в новостной ленте они упорядочиваются по дате. Поэтому хотелось бы, чтобы автоматом заполнялось пустующее место. Но, видимо в phpmyadmin такого не настроить, и, лучше просто написать какой-то код php на перебор IDшников?:oops:
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Это норм. Если id используются исключительно для внутренних нужд, то на эстетику плевать. А если где-то и внешне проявляются, например в адресах, то они должны оставаться фиксированными, чтобы не возникало некорректных адресов, не происходило нерелевантных ответов на запросы по адресам и т.п.

    Когда у вас будут миллиарды записей, тогда и будете задумываться об «уплотнении рядов», повторном использовании незадействованных id (на месте удаленных записей) и т.п. Хотя, как я написал выше, повторно использовать можно уже сейчас, особенно если id удаленных записей не были где-то засвечены. Но это уже скорее ручной труд. Даже более вменяемые админки этим обычно не занимаются. О phpMyAdmin и говорить нечего.
    --- Добавлено ---
    Вы можете изменить автоинкрементальный счетчик на id последней записи плюс 1. Если уверены, что во время этой манипуляции не создаются записи.
    --- Добавлено ---
    Но если у вас есть 5 и 26, а вы установите счетчик в 6, то при достижении им значения 26 у вас возникнут проблемы ;)
    --- Добавлено ---
    Поэтому счетчик лучше не трогать и оставить 6-25 незадействованными, либо добавлять записи с этими id, явно указывая их значения (вручную).
     
  8. Qeuvec

    Qeuvec Новичок

    С нами с:
    3 апр 2020
    Сообщения:
    10
    Симпатии:
    0
    Если бы знали что я использую для сервера :D "OpenServer"
    Если отсчитывать с последней, то это тот же самый автоинкремент же будет. Думаю просто счётчиком for пройтись по ID.
    Типо, если следующего элемента нет, то ID равняется ему.
    Но это когда нибудь потом. Это для "крусовой". мини-сайтик делаю.
    Но, уже начинаю просто для себя что-то делать
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    В вашем положении думать вредно :) Лучше слушать, что вам говорят, и читать ;)
     
  10. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    Просто поймите - что автоинекремент - это не счетчик строк в таблице, а именно автоинкремент
    который увеличивает на единицу при каждой операции, гарантируя уникальность id

    В практике - я не встречал необходимости "упорядочивания", "эстетичности" и прочей чепухи...
    Да бывают случаи когда нужно видеть некие номера завязанные на id в удобном для человека виде - но и в этом случае id Не трогают.... создают доп поля с генерацией номера на основе id

    Есле же в эстетично хотите просто в таблице вывода показывать номер строки - то делайте это на клиенте, не напрягайте БД этой ерундой
     
    artoodetoo и Qeuvec нравится это.