【发布时间】:2012-06-22 22:25:48
【问题描述】:
我创建了两个表和插入的值,如下所示。
表 1
create table maxID (myID varchar(4));
insert into maxID values ('A001');
insert into maxID values ('A002');
insert into maxID values ('A004');
insert into maxID values ('A003');
表 2
create table maxID2 (myID varchar(4) PRIMARY KEY);
insert into maxID2 values ('A001');
insert into maxID2 values ('A002');
insert into maxID2 values ('A004');
insert into maxID2 values ('A003');
当我执行查询时
SELECT myId, @rowid:=@rowid+1 as myrow
FROM maxID, (SELECT @rowid:=0) as init
ORDER BY myrow desc
LIMIT 1;
我得到的输出为
+++++++++++++
myid + myrow
+++++++++++++
A003 + 4
+++++++++++++
与
当我执行查询时
SELECT myId, @rowid:=@rowid+1 as myrow
FROM maxID2, (SELECT @rowid:=0) as init
ORDER BY myrow desc
LIMIT 1;
我得到的输出为
+++++++++++++
myid + myrow
+++++++++++++
A004 + 4
+++++++++++++
两个表之间的区别在于,在第二个表中我的 myID 为PRIMARY KEY。
您可以在www.sqlfiddle.com查看以上数据/结果。
我的问题是
为什么当查询相同时我得到两个不同的结果?
注意: 这个问题与我的旧问题 Getting last record from mysql 有点相关,我几乎得到了答案和牦牛告诉我行的顺序不能保证。 :(
【问题讨论】:
-
嗯,正是因为 Yak 所说的:订单无法保证。这里底层表的顺序不同很可能是因为 InnoDB 表使用了基于主键的聚集索引。简单的答案是表格中的行顺序应该从不重要。
标签: mysql sql optimization indexing