【 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 KEYeid_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 也是报同样报主键冲突
