0

我有一个与 MySql 数据库交互的 Web 应用程序。当我删除一条记录时,它的插槽似乎在我下次创建新记录时被重用。由于每条记录都有一个连续的主键,因此下一条记录将有一个新键,比如 5,但新记录将放置在最后一个空的位置,比如记录号 2 曾经所在的位置。有没有办法在列表底部直接添加新记录?有没有办法用 MySQL 查询浏览器做到这一点?

这是我所描述的一个例子:

1 用户名1 密码1
2 userName2 password2 --> 下次操作会删除这条记录
3 用户名3 密码3
4 用户名4 密码4

当记录 #2 消失时,下次我进行新添加时,记录 #5 占据了 2 号位置:

1 用户名1 密码1
5 用户名5 密码5
3 用户名3 密码3
4 用户名4 密码4

是否有推荐的方法来指示 MySQL(可能在创建表时)只应在列表底部添加新记录?所以,我们想禁用自动记录重用。

提前感谢您的帮助最诚挚的问候

4

4 回答 4

4

只需添加

ORDER BY id

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

于 2009-06-29T13:30:29.613 回答
0

您可以创建一个“插入时”触发器,它使用序列来设置 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;
于 2009-06-29T13:36:48.960 回答
0

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

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

于 2009-06-29T13:44:32.237 回答
0

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

于 2010-02-04T14:44:43.723 回答