我正在使用mysql并遇到一些问题。我想检索插入的最后一行。
<<以下是详细>>
以下是我创建表格的方式。
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')
当我执行时select myID, last_insert_id() as NewID from maxID,我得到如下输出
select myID, last_insert_id() as NewID from maxID
myId NewID A001 0 A002 0 A004 0 A003 0
当我尝试下面的代码时,
select myId, last_insert_id() as NewID, @rowid:=@rowid+1 as myrow from maxID, (SELECT @rowid:=0) as init
我得到如下输出。
myId NewID rowid A001 0 1 A002 0 2 A004 0 3 A003 0 4
但是,当我使用代码时select myId, last_insert_id() as NewID, @rowid:=@rowid+1 as myrow from maxID, (SELECT @rowid:=0) as init where @rowid = 4,出现错误Uknown column 'myrow' in where clause
select myId, last_insert_id() as NewID, @rowid:=@rowid+1 as myrow from maxID, (SELECT @rowid:=0) as init where @rowid = 4
Uknown column 'myrow' in where clause
使用时where @rowid=4,表中没有任何数据。
where @rowid=4
注意: 这里我使用4只是为了获得所需的输出。稍后我可以从查询中获取(select max(rowid) from maxID)
(select max(rowid) from maxID)
如果我只想查看最后一条记录,请建议我该怎么做A003。
A003
谢谢你的时间。
似乎SELECT不能保证a以任何特定顺序返回行(ORDER BY当然,不使用子句)。
SELECT
ORDER BY
根据SQL-92标准(第373页):
如果未指定,则指定的表为T,并且T中的行顺序与实现有关。
好的,MySQL并不完全符合SQL-92,但这是一个严重的提示。
Laurynas Biveinis(显然隶属于Percona)还指出:
ORDER BY由于月相的原因,没有子句(…)的行的顺序可能会有所不同,这是可以的。
在MySQL手册说,大约InnoDB的:
如果存在,InnoDB总是根据 _[aPRIMARY KEY或NOT NULL UNIQUE索引]_对表行进行排序。
PRIMARY KEY
NOT NULL UNIQUE
就我而言,我 认为 MySQL也可以OPTIMIZE TABLE在多次删除和插入后重新排序行,甚至重用空白空间(我试图找到一个示例,但到目前为止还是失败了)。
OPTIMIZE TABLE
鉴于您的表结构,不幸的是底线如此之多,以至于许多因素可能改变了行的顺序。我找不到可靠地确定它们插入顺序的解决方案。当然,除非自创建表以来保留所有二进制日志,否则;)
但是,您可能仍想sequence在表中添加一列。现有行将被分配可能不正确的序列号,但是至少将来的行将被正确排序。
sequence
ALTER TABLE maxID ADD sequence INT DEFAULT NULL; ALTER TABLE maxID ADD INDEX(sequence); ALTER TABLE maxID MODIFY sequence INT AUTO_INCREMENT;
http://sqlfiddle.com/#!2/63a8d/1