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

    Статус
    Оффлайн
    Регистрация
    03.01.2017
    Сообщений
    30
    Репутация:
    0 ±

    MySQL и AUTO INCREMENT

    Доброго времени суток.
    Столкнулся с одной проблемой, ее суть в следующем.
    Допустим, есть таблица следующего вида:
    поле "A", тип данных - varchar
    поле "B", тип данных - int
    поле "С", тип данных - int со ключом AUTO_INCREMENT

    Далее, вставляем несколько записей, получится что-то вроде этого:

    пример 228 1
    еще один 69 2
    ну и еще 1337 3

    Удаляем из базы данных запись, где авто инкремент равен 2.
    Получается, остается две записи с идентификаторами 1 и 3.
    Далее, при добавлении записи в БД, колонка с авто инкрементом будет содержать цифру 4.
    Собственно, в чем проблема. Я знаю, что значение авто инкремента можно поменять в самой СУБД (пример тому phpMyAdmin), но есть ли какой-то специальный запрос в mySQL, который сам выставляет значения согласно количеству записей и устанавливает наивысший (согласно количеству записей) авто-инкремент автоматически, без ручной работы? Чтобы было нагляднее (так как объяснять я не умею):
    До:
      Открыть/закрыть
    пример 228 1
    еще один 69 2
    ну и еще 1337 5
    так и быть, еще 1337 8

    После:
      Открыть/закрыть
    пример 228 1
    еще один 69 2
    ну и еще 1337 3
    ладно, еще один 1337 4

    При добавлении следующая запись будет содержать значение авто-инкремента "5"

  2. #2
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    1. format(dbHandle, query, sizeof query, "DELETE FROM houses WHERE id = '%d'", HouseInfo[houseid][hID]);
    2. mysql_tquery(dbHandle, query);
    3.  
    4. format(dbHandle, query, sizeof query, "ALTER TABLE houses AUTO_INCREMENT = %d", HouseInfo[houseid][hID]);
    5. mysql_tquery(dbHandle, query);

    Это?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    То, что ты хочешь, легче всего сделать через пересоздание таблицы. Либо делать вот такой трудоёмкий запрос, определяя свободный ID перед созданием нового столбца и указывать значение для столбца "C" вручную.

    Ни первый, ни второй вариант тебе не нужен. Всё, что тебе нужно - создать ещё один столбец и определять порядок значений в нём вручную (либо через foreach и Iter_Add/Iter_Remove/Iter_Free как тут). Столбец AUTO_INCREMENT вообще трогать не стоит, чтоб самому себе не создать проблем. А проблемы могут быть, если, например, изменить AUTO_INCREMENT на 5, а столбец с таким ID уже существует. Соответственно, следующий INSERT-запрос просто не сработает, ибо этот запрос будет с дублирующим AUTO_INCREMENT-значением.
    Последний раз редактировалось DeimoS; 03.10.2019 в 11:54.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

 

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

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

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

Ваши права

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