【 TiDB 使用环境】生产环境
【 TiDB 版本】
7.1.1
【复现路径】
程序多线程写入的时候报Duplicate entry ‘81432804’ for key ‘change_records.PRIMARY’, 但程序控制的是几秒内相同主键只会更新一次
【遇到的问题:问题现象及影响】
报主键冲突的这个表没有设置主键,是唯一键。把sql复制出来手工执行可以正常插入执行。
表结构:
CREATE TABLE change_records(
idbigint(20) NOT NULL COMMENT '序号',
u_idchar(32) NOT NULL DEFAULT '' COMMENT '唯一键',
eidchar(36) NOT NULL COMMENT 'eid',
seq_noint(11) NOT NULL COMMENT '序号',
after_contentmediumtext DEFAULT NULL COMMENT '变更后内容',
before_contentmediumtext DEFAULT NULL COMMENT '变更前内容',
change_datevarchar(255) NOT NULL DEFAULT '' COMMENT '变更日期',
change_itemvarchar(2000) NOT NULL DEFAULT '' COMMENT '变更名称',
update_timedatetime(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间', UNIQUE KEY
eid_u_id (
eid,
u_id), KEY
key_row_update_time (
row_update_time), KEY
eid_u_tags (
eid,
u_tags), KEY
key_type (
type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T! SHARD_ROW_ID_BITS=8 */ ;
插入语句:
INSERT
INTO
change_records (seq_no
,
special_type
,
eid
,
update_time
,
change_date
,
source
,
type
,
u_id
,
id
,
before_content
,
after_content
,
change_item
)
VALUES (-1,
0,
‘0c6c80b6-dce3-422b-9c1c’,
‘2024-04-16 01:54:51’,
‘2015-05-15’,
‘1’,
‘人员变更’,
‘d1d75004c7261a85c09c66375082d990’,
7085492,
‘张三’,
‘李四’,
‘人员’) ON
DUPLICATE KEY
UPDATE
seq_no
=
VALUES(seq_no
),
special_type
=
VALUES(special_type
),
eid
=
VALUES(eid
),
update_time
=
VALUES(update_time
),
change_date
=
VALUES(change_date
),
source
=
VALUES(source
),
type
=
VALUES(type
),
u_id
=
VALUES(u_id
),
id
=
VALUES(id
),
before_content
=
VALUES(before_content
),
after_content
=
VALUES(after_content
),
change_item
=
VALUES(change_item
);
之前用的replace into 也是报同样报主键冲突