【问题标题】:How can I SELECT the last row in a MySQL table ? I don't have any auto increment key如何选择 MySQL 表中的最后一行?我没有任何自动增量键
【发布时间】:2013-12-24 12:32:37
【问题描述】:

我想选择 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);

【问题讨论】:

标签: java mysql


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    数据库表中没有隐式排序。如果您在插入行时没有自动递增列、日期/时间列或其他遵循自然顺序的列,则只能使用其他方式来伪造它。

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

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

    【讨论】:

      【解决方案3】:

      可能有用

         SELECT MAX(ID) FROM YourTable
      
         // Similarly, ORDER BY with LIMIT:
      
          SELECT ID FROM YourTable ORDER BY ID Desc Limit 1
      

      【讨论】:

        【解决方案4】:

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

        我看到的只有积极的选择:

        1. 选择所有行。执行rs.last() 然后阅读它。
        2. 基于列使用order by desc 子句。
        3. 在所有选定的行上定义一个虚拟的row_num 并运行一个选择 在该 row_num 上具有 desc 顺序。
        4. 执行两条语句。一个查找行数,第二个查找 限制获取最后一行。

        上面第四个选项的伪示例:

        • int rowCount = "Select count(*) from my_table" 的结果;
        • 字符串查询 = "select * from my_table limit" + ( rowCount - 1 ) + ", 1";
        • rs = stmt.execute 上面的查询。
        • 从 rs 中读取唯一的记录,除了最后一条记录之外,没有。

        【讨论】:

          【解决方案5】:

          这就是你想要的。

          SELECT * FROM table_name ORDER BY id DESC LIMIT 1
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-02
            • 1970-01-01
            • 2010-09-23
            • 2020-02-17
            • 1970-01-01
            • 2016-07-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多