отключение повторного использования удаленных записей в Mysql
-
21-08-2019 - |
Вопрос
У меня есть веб-приложение, в котором я взаимодействую с базой данных MySQL.Когда я удаляю запись, кажется, что ее слот будет повторно использован при следующем создании новой записи.Поскольку каждая запись имеет последовательный первичный ключ, следующая запись будет иметь новый ключ, скажем, 5, но новая запись будет помещена в последнее пустое место, скажем, там, где раньше был номер записи 2.Есть ли способ добавить новые записи непосредственно в нижнюю часть списка?Возможно, есть ли способ сделать это с помощью браузера запросов MySQL?
Это пример того, что я описываю:
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 (возможно, при создании таблицы), что новые записи должны добавляться только в нижней части списка?итак, мы хотели бы отключить автоматическое повторное использование записи.
Заранее спасибо за вашу помощь С наилучшими пожеланиями
Решение
Просто добавьте
ORDER BY id
до конца вашего запроса (где "id" - это столбец 1, 2, 3, 4, 5 в вашей таблице)
Другие советы
Вы можете создать триггер "on insert", который использует последовательность для установки идентификатора (запись из памяти в соответствии с 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;
InnoDB справится с этим за вас на каком-то уровне.Все таблицы InnoDB имеют некоторую форму первичного ключа, который является кластеризованным, и они обычно настроены для последовательной обработки вставок.
Если вам запрещено использовать InnoDB, я полагаю, вам придется прибегнуть к изменению исходного кода, чтобы адаптировать то, как работает MyISAM.Я не особенно знаком с каким-либо другим "обычным" механизмом хранения данных для MySQL, поэтому я не уверен, есть ли другая альтернатива.
было бы лучше создать поле даты (date_added) и УПОРЯДОЧИТЬ ПО date_added