Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 8 из 8
  1. #1
    Аватар для Paradox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.06.2015
    Адрес
    Запорожье
    Сообщений
    117
    Репутация:
    1 ±

    MySQL и запись нового аккаунта

    Доброе время суток.
    В общем у меня возник такой вопрос.
    К примеру есть у нас 10 аккаунтов иды которых 1..10.
    Один из аккаунтов был удален, остались аккаунты к примеру 1..7, 9, 10
    Можно ли как-то сделать что бы запись нового аккаунта была на пропущенный ID?
    Если можно пример кода, буду очень благодарен.

  2. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Во-первых, зачем вам это? Боитесь, что впустую израсходуются все возможные ID в 32-битном диапазоне (а это 4 294 967 296 значений)?
    Во-вторых, если речь о MySQL, то там "из коробки" такой возможности нет (по крайней мере, я не видел ни разу).
    В-третьих, даже если бы такая возможность и была, она б требовала лишних затрат на поиск наименьшего незанятого ID. Даже с кешированием вроде запоминания наименьшего свободного ID при удалении эти затраты могут быть существенными при большом количестве аккаунтов.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. #3
    Аватар для whale
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.04.2014
    Сообщений
    74
    Репутация:
    17 ±

  4. #4
    Аватар для Paradox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.06.2015
    Адрес
    Запорожье
    Сообщений
    117
    Репутация:
    1 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Во-первых, зачем вам это? Боитесь, что впустую израсходуются все возможные ID в 32-битном диапазоне (а это 4 294 967 296 значений)?
    Во-вторых, если речь о MySQL, то там "из коробки" такой возможности нет (по крайней мере, я не видел ни разу).
    В-третьих, даже если бы такая возможность и была, она б требовала лишних затрат на поиск наименьшего незанятого ID. Даже с кешированием вроде запоминания наименьшего свободного ID при удалении эти затраты могут быть существенными при большом количестве аккаунтов.
    Не знаю, просто интересно стало, дело в том что сама ID length = 3, что будет если предпоследний аккаунт будет 999, то последний вообще не запишет или как?
    И да, я в курсе что значение length можно увеличить, просто мне стало интересно.

  5. #5
    Аватар для whale
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.04.2014
    Сообщений
    74
    Репутация:
    17 ±
    Цитата Сообщение от Paradox Посмотреть сообщение
    Не знаю, просто интересно стало, дело в том что сама ID length = 3, что будет если предпоследний аккаунт будет 999, то последний вообще не запишет или как?
    И да, я в курсе что значение length можно увеличить, просто мне стало интересно.
    Выше я тебе предоставил функцию. Но, тем не менее, использовать её для таблицы аккаунтов (которых может быть десятки тысяч, а то и сотни) - довольно плохая затея.

  6. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Если тебе нужно иметь столбец с данными, у которых все разрывы будут заполняться (например, для системы домов), то просто создавай ещё один столбец и уже самостоятельно реализуй отслеживание свободных ID (лучше это делать с помощью того же foreach, если все данные с таблицы всегда грузятся на сервер. Функция, что скинули выше, подойдёт только для не очень больших таблиц (ну чем больше строк, тем больше задержка), информация из которых либо вообще не хранится на сервере (нужные данные подгружаются в момент нужды), либо хранится частично, как, например, аккаунты). А столбец с AUTO_INCREMENT оставь для правильного функционирования таблицы + для обращения к данными через запросы.

    А нативно это не сделали в MySQL потому что, как уже заметили выше, на это будут уходить дополнительные ресурсы и это будет неоправданно.

    - - - Добавлено - - -

    И да, нет смысла ограничивать AUTO_INCREMENT столбцы типа INTEGER каким-то значением, отличным от 11. MySQL в любом случае выделит под столбец 4 байта. А указывая "3" ты лишь говоришь MySQL записывать первые 3 символа числа.
    Вообще в MySQL практически для всех типов данных, кроме VARCHAR, BLOB и TEXT, всегда выделяется фиксированное количество памяти, независимо от того, какое значение ты укажешь в качестве размера. Сделано это для того, чтоб ты мог в любой момент увеличить/уменьшить размер столбца и, при этом, не происходило дефрагментации. А, собственно, для VARCHAR, BLOB и TEXT количество памяти определяется реальным размером текста в столбце + 1 байт, в котором хранится число, равное размеру строки (вообще всё зависит от кодировки, но для SA-MP это не актуально).
    Подробнее об этом написано тут.
    Последний раз редактировалось DeimoS; 03.07.2018 в 18:46.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  7. #7
    Аватар для Paradox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.06.2015
    Адрес
    Запорожье
    Сообщений
    117
    Репутация:
    1 ±
    Спасибо за ответ, буду знать, мне не то что бы нужно что бы иды шли по порядку, скорее просто хотел знать что будет если указывать length определенное число и если оно будет превышать его.

  8. #8
    Аватар для Paradox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.06.2015
    Адрес
    Запорожье
    Сообщений
    117
    Репутация:
    1 ±
    Тему можно закрывать, всех благодарю за ответы.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •