отключение повторного использования удаленных записей в Mysql

0

У меня есть веб-приложение, в котором я взаимодействую с базой данных MySql. Когда я удаляю запись, кажется, что ее слот повторно используется при следующем создании новой записи. Так как каждая запись имеет последовательный первичный ключ, следующая запись будет содержать новый ключ 5, но новая запись будет помещена в последнее опустошенное место, скажем, где была номер записи 2. Есть ли способ добавить новые записи непосредственно в нижней части списка? Есть ли способ сделать это с помощью MySQL Query Browser?

Это пример того, что я описываю:

1 userName1 password1
2 userName2 password2 --> next operation will delete this record
3 userName3 password3
4 userName4 password4

когда запись № 2 исчезла, в следующий раз, когда я сделаю новое добавление, запись № 5 займет место 2:

1 userName1 password1
5 userName5 password5
3 userName3 password3
4 userName4 password4

Есть ли рекомендуемый способ инструктировать MySQL (возможно, при создании таблицы), что новые записи следует добавлять только в нижней части списка? поэтому мы хотели бы отключить автоматическое повторное использование записи.

Заранее благодарим за помощь Наилучшие пожелания

Теги:
reusability

4 ответа

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

Просто добавьте

ORDER BY id

до конца вашего запроса (где "id" - столбец 1, 2, 3, 4, 5 в вашей таблице)

  • 0
    Это представляет их в нужном порядке, но на самом деле это не влияет на базовую таблицу и повторное использование удаленных записей.
  • 0
    Самодержавие. Официально, согласно спецификациям SQL, фактический порядок хранения записей не имеет значения. Все записи должны быть независимыми объектами, если вы хотите определенный порядок просмотра, вы должны выполнить ORDER BY
0

создание поля даты (date_added) и ORDER BY date_added было бы лучше

0

Вы можете создать триггер "на вставке", который использует последовательность для установки идентификатора (запись из памяти в соответствии с Oracle, поэтому вам нужно будет проверить, не отличается ли она от MySQL):

create sequence table_name_id_seq order nocache cycle maxvalue 99999999;

create or replace trigger table_name_id
before insert on table_name for each row
begin
  select table_name_id_seq.nextval
    into :new.id
    from dual
  ;
end;
0

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

Если вам запрещено использовать InnoDB, я считаю, что вам придется прибегать к изменению исходного кода, чтобы адаптироваться к работе MyISAM. Я не особенно знаком с каким-либо другим "нормальным" механизмом хранения для MySQL, поэтому я не уверен, есть ли другая альтернатива.

Ещё вопросы

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