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

У меня есть веб-приложение, в котором я взаимодействую с базой данных 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 (возможно, при создании таблицы), что новые записи должны добавляться только внизу списка? Итак, мы хотели бы отключить автоматическое повторное использование записи.

Заранее спасибо за помощь С наилучшими пожеланиями

Ответы [ 4 ]

4 голосов
/ 29 июня 2009

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

ORDER BY id

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

0 голосов
/ 04 февраля 2010

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

0 голосов
/ 29 июня 2009

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

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

0 голосов
/ 29 июня 2009

Вы можете создать триггер «при вставке», который использует последовательность для установки идентификатора (запись из памяти в соответствии с 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;
...