mysql - 插入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 ?
解决方案
使用Result.LastInsertId()
. 这总是可靠的。
SELECT
由于 Go 驱动程序处理连接池的方式,自己做是不可靠的。如果你这样做,请说:
INSERT foo INTO bar ...
在一个声明中,然后是:
SELECT LAST_INSERT_ID();
在另一个语句中,您可能会为每个语句获得不同的数据库连接。
这意味着您手动选择的 ID 可能与过去恰好发生在同一连接上的一些完全不相关的 INSERT 语句相对应,或者您可能一无所获。
推荐阅读
- java - 应用程序代码中的逻辑问题 - 总和不正确
- c - 从 C 中的文本文件中读取逗号分隔的数字(坐标)
- python - 字符 b 附加到 numpy 数组的输出?
- python - 如何使用列表和字典将字符串转换为二进制代码
- reactjs - 创建 React App V2 - 多个入口点
- android - 错误:无法解决:com.google.firebase:firebase-core:16.1.0
- javascript - 换行 TextArea 默认值
- python - 为什么每次循环迭代都没有更新我的链表输出变量?
- java - 如何使用抽象字段将平面对象映射到深度 DTO?
- command-prompt - 即使安装程序包已设置为环境变量,“atom”命令也不起作用