禁用在Mysql中重复使用已删除的记录

时间:2009-06-29 13:25:57

标签: mysql reusability

我有一个Web应用程序,我在其中与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 个答案:

答案 0 :(得分:4)

只需添加

ORDER BY id

到查询的末尾(其中“id”是表格中的1,2,3,4,5列)

答案 1 :(得分:0)

你可以创建一个“on insert”触发器,它使用一个序列来设置ID(根据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;

答案 2 :(得分:0)

InnoDB会在某种程度上为您处理。所有InnoDB表都有某种形式的主键,它是集群的,通常设置为按顺序处理插入。

如果您无法使用InnoDB,我相信您将不得不求助于更改源代码以适应MyISAM的工作方式。我对MySQL的任何其他“普通”存储引擎并不是特别熟悉,所以我不确定是否还有其他选择。

答案 3 :(得分:0)

创建日期字段(date_added)和ORDER BY date_added会更好