insert into ON DUPLICATE KEY UPDATE语句,使用mybatis的useGeneratedKeys="true",update时获取不到主键

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:4.0
  • 【问题描述】:insert into ON DUPLICATE KEY UPDATE语句,使用mybatis, ,insert时正常拿到自增ID,update时获取自增ID为0。使用mysql一切正常,都能获取自增ID。

1、mybatis 开启这个配置 useGeneratedKeys=“true”,然后在 mysql 里面是能够正常的获取 insert 或 update 自增主键吗?

2、mybatis 开启相关配置后,在获取自增主键时,向 mysql 发送的查询的 sql 或者命令具体是什么?可能在这里存在一些兼容性的问题。如果无法确认相关命令,请评估开启 mysql/tidb 的 general log,观察下是否可以获取相关内容~

3、tidb 和 mysql 的 auto increment 有一些兼容性差异:

https://docs.pingcap.com/zh/tidb/dev/auto-increment#auto_increment

4、在业务逻辑上获取 insert 或 update 的自增 ID 的业务意义方便描述下吗?谢谢~~

1、mybatis 开启这个配置 useGeneratedKeys=“true”,然后在 mysql 里面是能够正常的获取 insert 或 update 自增主键吗?
mysql数据库,insert和update都能够正常使用。

2、mybatis 开启相关配置后,在获取自增主键时,向 mysql 发送的查询的 sql 或者命令具体是什么?可能在这里存在一些兼容性的问题。如果无法确认相关命令,请评估开启 mysql/tidb 的 general log,观察下是否可以获取相关内容~
设置useGeneratedKeys=“true”,会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键。

4、在业务逻辑上获取 insert 或 update 的自增 ID 的业务意义方便描述下吗?谢谢~~
一般用在主子表的情况下,主表可能存在重复插入的情况,当主表插入时,获取主键ID;当主表重复插入时更新部分属性,并获取已经存在的主键ID。在操作子表时作为子表属性插入。

  1. 问题中的 general log 能开启抓下 getgeneralkeys 在数据中执行的是什么语句吗,这个很关键
  2. 普遍的开发规范不建议对自增主键强依赖,建议子表的插入行换成其他唯一索引字段

ON DUPLICATE KEY UPDATE|attachment (10.8 KB)

日志见附件,多谢!

你好,
这里日志貌似没有上传完全,辛苦再上传下,非常感谢~

ON DUPLICATE KEY UPDATE (10.8 KB)

你好,
这边没有看到 insert 或者 Update 语句,只有一些use