例如,按照ID来说,有1,2,3,4,5五条数据,先delete删除数据2和4,再插入数据6,7,8,再查看数据时,顺序变成1,6,3,7,5,8。
即新插入的数据会先把之前删除数据的位置补上,然后再往后面排,这是什么原因导致的呢?
怎么插入数据,可以让新数据自动排在最后面呢
(主键已设置ID,自增长)
即新插入的数据会先把之前删除数据的位置补上,然后再往后面排,这是什么原因导致的呢?
怎么插入数据,可以让新数据自动排在最后面呢
(主键已设置ID,自增长)
解决方案 »
- 谁用过NAVICAT存储过程
- mysql_fetch_row(result); 会不会导致超时现象?
- mysql update语句导致硬盘空间大量减少!
- mysql 4.1.18 为什么不能创建超过16个字符的用户名?
- 简单菜问题!关于MYSQL的ODBC!!急!!!
- 请教,winXP下,不能用phpmyadmin新建数据库。
- 为什么在MYSQL中新建的用户无法登录?
- 不用goto, mysql 能实现图中的流程吗?
- 我有100万条企业名称,如果用 like %企业名称% 来查询不走索引特别慢,集群的效果也不明显,大佬们有什么好办法吗?
- MySQL中怎样检查系统中是否已有同名的光标
- mysql自动停止
- 请教大神,一个mysql优化问题!在线等,急!!
select *
...
order by id
顺序就正确了
你确定?
如果自增的是id会一直往后面排,不会因为你删除了一个id,就补上这个id的
我同意3楼的说法,MySQL不会往前插的,个人认为是第三方客户端的问题。
表是基于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无关
我的所有讨论都是基于Engine是InnoDB这个前提。
进一步分析具体的table space里的页内容,可以通过姜承尧的python来观察。
结帖率: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