Есть ли простой способ предотвратить рост количества идентификаторов строк в MySQL?

0

Мне было интересно, что самый простой способ разрешить идентификаторы таблицы автоматически, кроме AUTO_INCREMENT.

У меня есть таблица, которая будет накапливать тысячи строк в течение длительного периода времени. Некоторые из этих строк будут удалены позднее. Как получить новые строки, чтобы получить самый низкий доступный идентификатор, не вдаваясь в это вручную.

Могу ли я, например, reset AUTO_INCREMENT каждый раз, когда кто-то добавляет строку?

  • 2
    почему ты хочешь сделать это? Это может очень испортить прошлые запросы для старых, теперь удаленных, данных.
  • 1
    Мне любопытно - зачем вам последовательные идентификаторы без пробелов?
Показать ещё 1 комментарий
Теги:
auto-increment

5 ответов

0
Лучший ответ

Возможно, что reset автоматическое добавление к следующему возможному ID:

ALTER TABLE table_name AUTO_INCREMENT = 1

Вам даже не нужно устанавливать его на следующий доступный ключ. MySQL будет автоматически использовать следующий ключ при следующем обновлении. Поэтому даже установка "1" каждый раз безопасна.

Но если вам не нужен идентификатор, почему вы даже используете идентификатор? А также даже большое количество идентификаторов не является проблемой. Я получил таблицу с более чем 20 миллионами записей и никогда не испытывал проблем с идентификаторами.

  • 0
    Почему люди всегда голосуют против возможных ответов на вопрос ОП, не объясняя их?
  • 0
    Я проголосовал за ваш ответ и пометил правильный ответ. Я знаю, что это редко требуется и должно быть решено другими способами, но разработчик должен знать плохие методы, чтобы избежать их. Все остальное было бы глупо.
Показать ещё 2 комментария
4

Честно говоря, это не стоит хлопот. Я считаю, что это возможно, но это просто уникальный идентификатор в конце дня - не имеет значения, если его 1 или 1000.

Если это для других целей, рассмотрите использование другого поля.

ИМО, вы не должны связываться с индексами.

2

Невозможно, идентификатор уникален и может быть использован один раз..

возможно только при очистке таблицы.

  • 1
    Это неверно. Он может быть использован только один раз одновременно, но может быть использован снова, если вы удалили запись.
  • 0
    прямо @ Кау-Бой :)
Показать ещё 5 комментариев
1

Кому это нужно? integer может иметь миллиарды уникальных значений, все они стоят того же объема памяти (по 4 байта). Азартные игры с первичным ключом похожи на русскую рулетку в вашу базу данных: в итоге ваша база данных умрет (она будет повреждена).

0

Я думаю, вы могли бы использовать триггеры для этого, но это, вероятно, превратится в огромный беспорядок через некоторое время. Не понимаю, почему вы не хотите использовать auto_increment вместо этого, есть ли у вас какая-то особая причина?

Триггеры в MySQL 5.0

@Jordy: ваше утверждение не все верно, да только одна строка может иметь одно значение в любой заданной точке, но если вы удалите строку, вы можете повторно использовать удаленное значение для другой строки. Вы также можете reset счетчик на любое значение, которое вы хотите включить, без удаления таблицы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню