首页 > 解决方案 > 插入mysql db时获取Last Insert Id的最可靠方法是什么

问题描述

我找到了两种获取最后一个插入 ID 的方法

Result, err := s.DB.ExecContext(ctx, query, qp)
if err != nil {
    return 0, err
}
ID, err := Result.LastInsertId()

另一种方法是使用mysql的

select LAST_INSERT_ID();

这两种方法有什么不同,如果第一种方法抛出错误,我应该怎么做,这意味着我的插入失败还是意味着该方法未能返回 id ?

标签: mysqlsqlgo

解决方案


使用Result.LastInsertId(). 这总是可靠的。

SELECT由于 Go 驱动程序处理连接池的方式,自己做是不可靠的。如果你这样做,请说:

INSERT foo INTO bar ...

在一个声明中,然后是:

SELECT LAST_INSERT_ID();

在另一个语句中,您可能会为每个语句获得不同的数据库连接。

这意味着您手动选择的 ID 可能与过去恰好发生在同一连接上的一些完全不相关的 INSERT 语句相对应,或者您可能一无所获。


推荐阅读