如何选择MySQL表中的最后一行?我没有任何自动增量键

时间:2013-12-24 12:32:37

标签: java mysql

我想选择MySQL表中的最后一行。我在该表中没有任何自动增量键。

public String getLastLeaveId() {
    try {
        Statement stmt  = getConnection();
        String sql="select leaveID from applied leave"; // here I want some logic that will fetch only leave_id from last row only
        stmt.execute(sql);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}


//Table Structure --->
(leave_id varchar(50) primary key,emp_id varchar(40),birthday varchar(20),anniv varchar(20),rh varchar(200),total int,foriegn key(emp_id) reference employee);

5 个答案:

答案 0 :(得分:2)

按照您现在订购的任何列的顺序降序,并在最后执行limit 0,1

答案 1 :(得分:0)

数据库表中没有隐式排序。如果您没有自动增量列,日期/时间列或插入行时遵循自然顺序的其他列,则仅限于使用其他伪造方式。

您没有在问题中显示表格结构,也没有说明您使用的是MyISAM还是InnoDB。 MyISAM按顺序存储行(通常),因此您可以使用Java中的ResultSet.last()等内容来获取最后一行,但如果您不使用MyISAM,则不能依赖它。 InnoDB是默认存储引擎,以更高效的B-Tree顺序存储记录,并且根本不保留插入顺序,而是根据主键的顺序存储记录。

简而言之,您需要选择一个具有某种自然顺序(或发明一个)并按此顺序排序的字段。

答案 2 :(得分:0)

它可能有用

   SELECT MAX(ID) FROM YourTable

   // Similarly, ORDER BY with LIMIT:

    SELECT ID FROM YourTable ORDER BY ID Desc Limit 1

答案 3 :(得分:0)

如果没有where子句和/或order by condition,则无法直接获取查询中的最后一行。您需要遍历所有行以在最后一行之前停止。

我看到的唯一正面选择是:

  1. 选择所有行。执行rs.last()然后阅读。
  2. 根据列使用order by desc子句。
  3. 在所有选定的行上定义虚拟row_num并运行选择 在row_num上使用desc命令。
  4. 执行两个语句。一个用于查找行计数,另一个用于查找 限制获取最后一行。
  5. 上面第4个选项的伪示例:

    • int rowCount =“从my_table中选择计数(*)”的结果;
    • String query =“select * from my_table limit”+(rowCount - 1)+ “,1”;
    • rs = stmt.execute以上查询。
    • 读取唯一的记录,只有最后一条记录,来自rs,fetched。

答案 4 :(得分:-1)

这就是你想要的。

SELECT * FROM table_name ORDER BY id DESC LIMIT 1