在MySQL数据库中存储链表的最好方法是什么,这样插入就很简单(即不必每次都对一堆东西重新索引),并且可以很容易地按顺序取出链表?
发布于 2008-09-15 18:06:32
在表中存储一个名为“position”的整型列。为列表中的第一项记录0,为第二项记录1,依此类推。在数据库中为该列建立索引,当您想要提取值时,按该列排序。
alter table linked_list add column position integer not null default 0;
alter table linked_list add index position_index (position);
select * from linked_list order by position;
要在索引3处插入值,请修改第3行及以上行的位置,然后插入:
update linked_list set position = position + 1 where position >= 3;
insert into linked_list (my_value, position) values ("new value", 3);
发布于 2008-09-15 18:12:40
创建一个包含两个自引用列PreviousID和NextID的表。如果该项是列表中的第一项,则PreviousID将为空,如果它是最后一项,则NextID将为空。SQL将如下所示:
create table tblDummy
{
PKColumn int not null,
PreviousID int null,
DataColumn1 varchar(50) not null,
DataColumn2 varchar(50) not null,
DataColumn3 varchar(50) not null,
DataColumn4 varchar(50) not null,
DataColumn5 varchar(50) not null,
DataColumn6 varchar(50) not null,
DataColumn7 varchar(50) not null,
NextID int null
}
发布于 2008-09-15 18:11:37
使用Adrian的解决方案,但不是递增1,而是递增10甚至100。然后,可以按照插入内容的差值的一半来计算插入内容,而不必更新插入内容下的所有内容。选择一个足够大的数字来处理您的平均插入次数-如果它太小,那么您将不得不在插入期间使用更高的位置更新所有行。
https://stackoverflow.com/questions/65205
复制相似问题