为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【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。在操作子表时作为子表属性插入。