例如,按照ID来说,有1,2,3,4,5五条数据,先delete删除数据2和4,再插入数据6,7,8,再查看数据时,顺序变成1,6,3,7,5,8。
即新插入的数据会先把之前删除数据的位置补上,然后再往后面排,这是什么原因导致的呢?
怎么插入数据,可以让新数据自动排在最后面呢
(主键已设置ID,自增长)

解决方案 »

  1.   

    索引,innodb
      

  2.   

    select的时候加order by id,
    select *
    ...
    order by id
    顺序就正确了
      

  3.   

    你的id是自增的,怎么可能出现:新插入的数据会先把之前删除数据的位置补上,然后再往后面排
    你确定?
    如果自增的是id会一直往后面排,不会因为你删除了一个id,就补上这个id的
      

  4.   

    怎么查询的,第三方客户端?什么查询语句?在MySQL的命令行下执行试试。
    我同意3楼的说法,MySQL不会往前插的,个人认为是第三方客户端的问题。
      

  5.   

    给一下你的表定义如果id是pk,那么
    表是基于id这个pk的index ordered table,插入的物理位置,是由单调增的id决定的;
    page内会保证顺序;
    page间虽然不是物理有序,也有b+tree保证逻辑有序,在访问的时候是靠叶链表,还是有序的;如果id只是一个secondary index,那么
    插入位置,是由pk决定,需要case by case地看插入的pk到底是什么;
    当select是按pk访问时,顺序与id这个secondary index无关;
    当select是按id这个index访问时,是不是会因为有insert buffer和change buffer存在,使得顺序并不与id这个secondary index一致?(我不确定,这个情况有些意思,大家一起讨论一下吧)如果id上没有index,那么
    插入位置,也是由pk决定,需要case by case地看插入的pk到底是什么;
    无论怎么访问,顺序与id无关
      

  6.   


    我的所有讨论都是基于Engine是InnoDB这个前提。
    进一步分析具体的table space里的页内容,可以通过姜承尧的python来观察。
      

  7.   

    qq_30617751
    结帖率:0%当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
    http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
    http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html8、如何给分和结贴?
    http://bbs.csdn.net/help#post_dispose