首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL中的链表

SQL中的链表
EN

Stack Overflow用户
提问于 2008-09-15 18:02:02
回答 11查看 51.1K关注 0票数 67

在MySQL数据库中存储链表的最好方法是什么,这样插入就很简单(即不必每次都对一堆东西重新索引),并且可以很容易地按顺序取出链表?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-09-15 18:06:32

在表中存储一个名为“position”的整型列。为列表中的第一项记录0,为第二项记录1,依此类推。在数据库中为该列建立索引,当您想要提取值时,按该列排序。

代码语言:javascript
复制
 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行及以上行的位置,然后插入:

代码语言:javascript
复制
 update linked_list set position = position + 1 where position >= 3;
 insert into linked_list (my_value, position) values ("new value", 3); 
票数 15
EN

Stack Overflow用户

发布于 2008-09-15 18:12:40

创建一个包含两个自引用列PreviousID和NextID的表。如果该项是列表中的第一项,则PreviousID将为空,如果它是最后一项,则NextID将为空。SQL将如下所示:

代码语言:javascript
复制
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
}
票数 18
EN

Stack Overflow用户

发布于 2008-09-15 18:11:37

使用Adrian的解决方案,但不是递增1,而是递增10甚至100。然后,可以按照插入内容的差值的一半来计算插入内容,而不必更新插入内容下的所有内容。选择一个足够大的数字来处理您的平均插入次数-如果它太小,那么您将不得不在插入期间使用更高的位置更新所有行。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档