如何获取Oracle表中最后插入的记录(主键无顺序场景)
解决随机主键表获取最近插入记录的问题
如果主键是随机生成的无顺序值,无法通过ID降序筛选最新插入记录,可按以下方案处理:
方法一:新增插入时间字段(推荐)
给orderdetails表添加一个记录插入时间的字段,比如命名为created_at,设置默认值为当前时间(不同数据库语法略有差异):
- MySQL/PostgreSQL:
DATETIME DEFAULT CURRENT_TIMESTAMP - SQL Server:
DATETIME DEFAULT GETDATE()
添加字段后,即可通过时间排序获取最新记录:
SELECT * FROM orderdetails ORDER BY created_at DESC LIMIT 1;
方法二:利用数据库内置系统字段(部分数据库支持)
部分数据库自带可判断记录插入顺序的系统字段,可临时应急使用:
- Oracle:借助
ORA_ROWSCN和SCN_TO_TIMESTAMP函数转换插入时间排序:
SELECT * FROM orderdetails ORDER BY SCN_TO_TIMESTAMP(ORA_ROWSCN) DESC FETCH FIRST 1 ROW ONLY;
- PostgreSQL:通过
xmin事务ID相对排序(仅能判断先后,无具体时间):
SELECT * FROM orderdetails ORDER BY xmin DESC LIMIT 1;
方法三:业务侧记录(不推荐)
若暂时无法修改表结构,可在业务代码里记录每次插入的ID,但并发场景下易出错,仅适合临时测试,不建议生产环境使用。你当前硬编码ID的SQL并非通用解决方案,建议替换为上述更可靠的方式。
内容的提问来源于stack exchange,提问作者Srinivasan Sekar
相关产品推荐
相关产品推荐

