请问一下:我要实现一个有顺序的用户歌曲列表 
用户可以进行歌曲的上移,下移,删除操作, 数据库怎样设计?我现在的设计是
create table md_usersonglist
(
   usslID               int not null auto_increment,
   usslAlbumID          int,//专辑的ID
   usslSongID           int,//歌曲ID
   usslSongName         varchar(40),//歌曲名
   usslDre          varchar(200),//备注
   usslNo               smallint,//歌曲排号
   primary key (usslID)
);用户要是进行删除操作后 ,又有了一个上移操作
如: 编号现在已经有1,2,3  删除的2 ,现在要把3号歌曲上移,本来是2,3大颠倒的 但数据库已经没有了2号,
我应该这样处理

解决方案 »

  1.   

    可以创建一个触发器,删除后更新create trigger upd_trig after delete on md_usersonglist
    for each row
    begin
      update md_usersonglist set id=id-1 where id>new.id;
    end
      

  2.   

    在数据库表中不建议去更改这个编号,这个编号可以在你的程序中来实现,而不是在数据库中。比如
    数据表中
    id  ccc
    1   a1
    2   a3
    5   d4
    9   fe
    10  dd你可以通过程序显示为
    sno id  ccc
    1 1   a1
    2 2   a3
    3 5   d4
    4 9   fe
    5 10  dd
      

  3.   

    MySQL中的ROWNUM的实现 
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/04/20/4095531.aspx
    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
      

  4.   

    1.用触发器当delete的时候出发update其他的列2.实现oracle的rownum
    按大小排序
      

  5.   

    1# 把new->old才可以。
    如果数据量大的话最后不要这样做,开销很大的。