自增id=0,更新后,会把id=0 的更新了 id=自增值

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【概述】:场景 + 问题概述
UPDATE db.ts
SET ***
WHERE id = 0;
其中id为自增的, 执行update后,会把id=0 的更新了 id=自增值

【TiDB 版本】:
v5.0.2
【附件】:

这个现象应该是和 MySQL 保持一致,如果是 autoincrement id,并且想插入 id0 的记录,那么可以按照 MySQL 文档的说明,添加下 NO_AUTO_VALUE_ON_ZERO,再测试验证下:

https://dev.mysql.com/doc/mysql-tutorial-excerpt/5.7/en/example-auto-increment.html

1、在tidb的sql_mode添加NO_AUTO_VALUE_ON_ZERO没有效果。
2、补充一下环境:上游是mysql、下游是tidb,通过dm做同步,在mysql做update,mysql的自增id还是为0,tidb的会变为自增值。

在 tidb 5.0 版本测试是可以的,你那里通过 DM 同步,在 task 文件中配置 sql-mode 了吗?如果允许,那么请提供下完整的 task 配置文件,DM 版本以及完整的测试步骤 ~

1、配置文件

name: task6
task-mode: incremental
meta-schema: “dm_meta”
timezone: “Asia/Shanghai”
case-sensitive: false
online-ddl-scheme: “gh-ost”
ignore-checking-items: [“table_schema”]
clean-dump-file: true

target-database:
host: “192.168.0.34”
port: 4000
user: “root”
password: “W/pQpGRBpRHckAFliSNPR4AHcgGPA==”

session:
tidb_skip_utf8_check: 1
tidb_constraint_check_in_place: 0

block-allow-list:
bw-rule-1:
do-dbs: [“db_diffd”, “db_export”, “db_gyb”, “db_fgedl”, “db_lfweo”, “db_mdp”, “db_pureftfpd”, “db_xxl_job”]
ignore-dbs: [“test”]
ignore-tables:

  • db-name: “db_fgedl”
    tbl-name: “ts_difagasose_order”

mydumpers:
global:
threads: 64
chunk-filesize: 64
skip-tz-utc: true
extra-args: “–consistency none”

loaders:
global:
pool-size: 64
dir: “./dumped_data”

syncers:
global:
worker-count: 64
batch: 500
enable-ansi-quotes: true
safe-mode: true

source-id: “source1”
meta:
binlog-name: mysql-bin.000144
binlog-pos: 487396454
block-allow-list: “bw-rule-1”

mydumper-config-name: “global”
loader-config-name: “global”
syncer-config-name: “global”

2、 测试步骤

在mysql主库执行:
UPDATE db_export . ts_product
SET price = ‘1.20’
WHERE id = 0;
在mysql上看id还是为0;
在tidb上看,id变为自增id值

从 DM 2.0 版本开始,支持作用于 DM 的 Session 级别的参数如下:

https://docs.pingcap.com/zh/tidb-data-migration/stable/task-configuration-file-full#dm-任务完整配置文件介绍

如果是 2.0 版本,那么可通过设置上述参数来调整 SQL Mode;
如果是 1.0 版本,那么请将下游 TiDB 全局的 SQL Mode 修改为目标 SQL Mode,重启 task 以及 DM Worker,然后再重新测试观察,如果仍不符合预期,那么请提供详细的测试步骤

另外,处于什么考虑,要使用 ID 为 0 的 auroincrement ?

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。