我发现了两种获取最后一个插入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?
答案 0 :(得分:2)
使用Result.LastInsertId()
。这总是可靠的。
由于Go驱动程序处理连接池的方式,您自己执行SELECT
是不可靠的。如果这样做,请说:
INSERT foo INTO bar ...
在一个声明中,然后再声明:
SELECT LAST_INSERT_ID();
在另一条语句中,您可能会为每个语句获得到数据库的不同连接。
这意味着您手动选择的ID可能与某些完全不相关的INSERT语句相对应,而该语句过去恰好发生在同一连接上,或者您可能什么也没得到。