sql执行有些诡异问题

我们测试环境(4.3.5 OB社区版)碰到个奇怪的问题,有个insert into values (),(),(),(),()

然后有个字段是唯一的。 mybatis的参数打印均没冲突。但sql执行抛出了违反唯一的错误。(多次执行也是这样

我有个动作就是这个批量插入的表删除过几十万的数据,sql控制台返回执行成功了。

然后我试了一下找了一条别的数据 然后把冲突的字段调整成为那个值,也能执行成功。然后又重新执行insert into values 就正常了。

有可能跟删除几十万数据ob上面并没有清理干净导致吗?有些诡异

表结构发一下 数据也发一下 看看具体的问题

建立表语句和下面有 java控制台 mybatis打印的日志
CREATE TABLE trade_ord (
or_id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘交易自增id’,
eid varchar(45) DEFAULT ‘’ COMMENT ‘所属平台交易id,如果eid的lock=’‘M’’,则有meid.’,
meid varchar(45) DEFAULT ‘’,
sid varchar(32) DEFAULT ‘’ COMMENT ‘关联交易id’,
oid varchar(45) DEFAULT ‘’ COMMENT ‘子订单编号’,
buyer_id varchar(45) NOT NULL DEFAULT ‘’,
sh_id smallint(5) DEFAULT ‘0’ COMMENT ‘所属店铺’,
created int(10) DEFAULT ‘0’,
modify int(10) DEFAULT ‘0’ COMMENT ‘订单修改时间,目前只有taobao.trade.ordersku.update会返回此字段。’,
endtime int(10) DEFAULT ‘0’ COMMENT ‘子订单的交易结束时间 说明:子订单有单独的结束时间,与主订单的结束时间可能有所不同,在有退款发起的时候或者是主订单分阶段付款的时候,子订单的结束时间会早于主订单的结束时间,所以开放这个字段便于订单结束状态的判断’,
status enum(‘WAIT’,‘PAY’,‘COD’,‘CSRV’,‘FDRV’,‘NEW’,‘PRT’,‘PICK’,‘PACK’,‘LEFT’,‘SEND’,‘FRD’,‘SRATE’,‘BRATE’,‘SIGN’,‘DONE’,‘FAIL’,‘REFUND’,‘HOLD’,‘SPLIT’,‘FORBID’) DEFAULT NULL COMMENT ‘WAIT:等待买家付款,PAY:买家已付款,COD:货到付款已发起,CSRV:客审,FDRV:财审,NEW :待生产,PRT :打单,PICK:配货,PACK:打包,LEFT:仓库已发货,SEND:卖家已发货,FRD:包裹被转发,SRATE:卖家已评价,BRATE:买家已评价,SIGN:买家已签收,DONE:交易成功,FAIL:交易失败,REFUND:退款中,HOLD:已解析,SPLIT:已拆分,FORBID:禁止发货’,
title varchar(256) DEFAULT ‘’ COMMENT ‘商品标题’,
num_iid bigint(20) DEFAULT ‘0’ COMMENT ‘商品数字id’,
num decimal(40,16) DEFAULT ‘0.0000000000000000’,
price decimal(32,16) DEFAULT ‘0.0000000000000000’ COMMENT ‘商品金额’,
outer_id varchar(128) DEFAULT ‘’,
outer_sku_id varchar(45) DEFAULT ‘’,
item_meal_id int(10) DEFAULT ‘0’ COMMENT ‘套餐id’,
item_meal_name varchar(45) DEFAULT ‘’ COMMENT ‘套餐的值’,
fee_total decimal(32,16) DEFAULT ‘0.0000000000000000’ COMMENT ‘应付金额’,
fee_pay decimal(32,16) DEFAULT ‘0.0000000000000000’ COMMENT ‘实付金额’,
ord_fee decimal(32,16) unsigned DEFAULT ‘0.0000000000000000’ COMMENT ‘分摊之后的实付金额’,
fee_discount decimal(40,16) DEFAULT ‘0.0000000000000000’ COMMENT ‘订单优惠金额’,
fee_adjust decimal(40,16) DEFAULT ‘0.0000000000000000’ COMMENT ‘调整金额’,
sku_prop_name varchar(128) DEFAULT ‘’ COMMENT ‘sku的值’,
refund_id bigint(20) DEFAULT ‘0’ COMMENT ‘最近退款id’,
refund_status enum(‘NO’,‘WAIT’,‘RTN’,‘CFM’,‘REFUSE’,‘CLOSE’,‘DONE’) DEFAULT ‘NO’ COMMENT ‘WAIT:买家已经申请退款,等待卖家同意,RTN:卖家已经同意退款,等待买家退货,CFM:买家已经退货,等待卖家确认收货,REFUSE:卖家拒绝退款,CLOSE:退款关闭,DONE:退款成功’,
pic_path varchar(256) DEFAULT ‘’ COMMENT ‘商品图片的绝对地址’,
buyer varchar(128) DEFAULT ‘’ COMMENT ‘买家昵称’,
cid bigint(20) DEFAULT ‘0’ COMMENT ‘对应叶子类目id’,
act_hash varchar(32) DEFAULT ‘’ COMMENT ‘最近对应的一笔erp变更日志键值’,
ord_type enum(‘BUY’,‘GIFT’,‘ADD’,‘SWAP’) DEFAULT ‘BUY’ COMMENT ‘BUY:购买品,GIFT:营销活动,ADD:加货,SWAP:换货’,
remarks varchar(128) DEFAULT ‘’,
ord_hash varchar(32) DEFAULT ‘’,
poid varchar(45) DEFAULT NULL COMMENT ‘组合商品子订单号’,
commission_fee decimal(10,2) DEFAULT NULL COMMENT ‘达人佣金’,
talent_id varchar(128) DEFAULT NULL COMMENT ‘达人id’,
find_in_set varchar(45) DEFAULT NULL COMMENT ‘营销活动Id’,
sale_delegate_name varchar(300) DEFAULT NULL COMMENT ‘销售代表’,
PRIMARY KEY (or_id),
UNIQUE KEY oid_UNIQUE (oid) BLOCK_SIZE 16384 LOCAL,
UNIQUE KEY ord_hash_UNIQUE (ord_hash) BLOCK_SIZE 16384 LOCAL,
KEY idx_eid_outerid_created (eid, outer_id, created) BLOCK_SIZE 16384 LOCAL,
KEY status (status) BLOCK_SIZE 16384 LOCAL,
KEY eid (eid) BLOCK_SIZE 16384 LOCAL,
KEY num_iid (num_iid) BLOCK_SIZE 16384 LOCAL,
KEY IDX_ST_MO_OU (status, modify, outer_id) BLOCK_SIZE 16384 LOCAL,
KEY sid (sid) BLOCK_SIZE 16384 LOCAL,
KEY outer_id (outer_id) BLOCK_SIZE 16384 LOCAL,
KEY idx_outer_sku_id (outer_sku_id) BLOCK_SIZE 16384 LOCAL
) ORGANIZATION INDEX AUTO_INCREMENT = 25762906 AUTO_INCREMENT_MODE = ‘ORDER’ DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = ‘zstd_1.3.8’ REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE ENABLE_MACRO_BLOCK_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 COMMENT = ‘子订单信息表’ WITH COLUMN GROUP(all columns, each column)

2025-07-24 16:31:05.390 [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#16-1] DEBUG com.xxx.test.dao.oms.TradeOrdMapper.batchInsertTradeOrd143 - ==> Preparing: insert into trade_ord (or_id, eid,sid, oid, buyer_id,sh_id, created, modify,status,title,num_iid, num, price,outer_id, fee_pay,fee_total,ord_fee, buyer, ord_type,ord_hash,remarks,fee_discount,cid,outer_sku_id,pic_path,refund_status,sku_prop_name,poid,commission_fee,talent_id,find_in_set) values ( ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) , ( ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) , ( ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) , ( ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) , ( ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
2025-07-24 16:31:05.392 [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#16-1] DEBUG com.xxx.test.dao.oms.TradeOrdMapper.batchInsertTradeOrd143 - ==> Parameters: null, 15461753345865950443(String), 2490039877608601864(String), 2490039877609601864(String), 52451753345865919007(String), 4(Integer), PAY(String), 【活动价】roopy润培护手霜女秋冬滋润补水长效保湿小支便携式官方正品旗舰(String), 619277034648(Long), 1(BigDecimal), 15900(BigDecimal), SKUZH20230901005(String), 6144(BigDecimal), 15900(BigDecimal), 6144(BigDecimal), 风**(String), BUY(String), e35d7d8f3aabc43f45673a244253aba0(String), (String), 4000(BigDecimal), 121452007(Long), 5843889994417(String), https://img.alicdn.com/bao/uploaded/i1/2207786635569/O1CN01rPkiGJ1r0efKXiaTs_!!2207786635569.jpg(String), NO(String), 净含量:7支;香味:【79元7支装】全款香型(String), null, null, null, null, null, 15461753345865950443(String), 2490039877608601864(String), 2490039877610601864(String), 52451753345865919007(String), 4(Integer), PAY(String), roopy润培乐境系列护手霜女秋冬滋润补水长效保湿防干不油腻便携(String), 749373283748(Long), 1(BigDecimal), 9900(BigDecimal), SKUZH20250123004(String), 990(BigDecimal), 9900(BigDecimal), 990(BigDecimal), 风**(String), BUY(String), 59f8125309f1b5b059e029d246494f24(String), (String), 8910(BigDecimal), 50022677(Long), 5292578452953(String), https://img.alicdn.com/bao/uploaded/i1/2207786635569/O1CN01N4VBMF1r0eijm18w9_!!2207786635569.jpg(String), NO(String), 净含量:24g;香味:顺手买护手霜(浆果密语+拂风茶语)(String), null, null, null, null, null, 15461753345865950443(String), 2490039877608601864(String), 2490039877611601864(String), 52451753345865919007(String), 4(Integer), PAY(String), 【赠品】咨询客服领取好礼(String), 727590250832(Long), 1(BigDecimal), 9900(BigDecimal), 103202307100001(String), 0(BigDecimal), 9900(BigDecimal), 0(BigDecimal), 风**(String), BUY(String), 6c51fab8821aa01ef2dd51bc3b17ad5a(String), (String), 9900(BigDecimal), 50023728(Long), (String), https://img.alicdn.com/bao/uploaded/i3/2207786635569/O1CN01QynAPq1r0eZFd8DLp_!!0-item_pic.jpg(String), NO(String), null, null, null, null, null, null, 15461753345865950443(String), 2490039877608601864(String), 2490039877612601864(String), 52451753345865919007(String), 4(Integer), PAY(String), 25g润培(美妆) 馥奇香氛植物精粹护手霜25g(String), 742251749826(Long), 1(BigDecimal), 2500(BigDecimal), 6972598241827(String), 0(BigDecimal), 2500(BigDecimal), 0(BigDecimal), 风**(String), BUY(String), 33561330db70b2240ef8b118245a9e5f(String), (String), 2500(BigDecimal), 50023728(Long), (String), https://img.alicdn.com/bao/uploaded/i1/2207786635569/O1CN01Ub2kjk1r0ed12IDm4_!!0-item_pic.jpg(String), NO(String), null, null, null, null, null, null, 15461753345865950443(String), 2490039877608601864(String), 2490039877613601864(String), 52451753345865919007(String), 4(Integer), PAY(String), 【赠品链接 拍下不发货】润培手霜挤压器(String), 718165849438(Long), 1(BigDecimal), 9900(BigDecimal), 6972598243821(String), 0(BigDecimal), 9900(BigDecimal), 0(BigDecimal), 风**(String), BUY(String), 53b5ed128b870cbae0847cb99cc7729d(String), (String), 9900(BigDecimal), 50023728(Long), (String), https://img.alicdn.com/bao/uploaded/i2/2207786635569/O1CN01LVPW8Z1r0eeXQpEEg_!!0-item_pic.jpg(String), NO(String), null, null, null, null, null
2025-07-24 16:31:05.375 [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#16-9] ERROR com.xxx.test.component.BaseReceiver138 - 【Consumer】消费消息异常
org.springframework.dao.DuplicateKeyException:

Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry ‘2490039877612601864’ for key ‘oid_UNIQUE’

The error may exist in class path resource [mapper/oms/TradeOrdMapper.xml]

The error may involve com.xxx.test.dao.oms.TradeOrdMapper.batchInsertTradeOrd-Inline

The error occurred while setting parameters

SQL: insert into trade_ord (or_id, eid,sid, oid, buyer_id,sh_id, created, modify,status,title,num_iid, num, price,outer_id, fee_pay,fee_total,ord_fee, buyer, ord_type,ord_hash,remarks,fee_discount,cid,outer_sku_id,pic_path,refund_status,sku_prop_name,poid,commission_fee,talent_id,find_in_set) values ( ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) , ( ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) , ( ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) , ( ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) , ( ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )

Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry ‘2490039877612601864’ for key ‘oid_UNIQUE’

; Duplicate entry ‘2490039877612601864’ for key ‘oid_UNIQUE’; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry ‘2490039877612601864’ for key ‘oid_UNIQUE’

那你把唯一键给禁用了 直接把数据插入进入 在分组查询一下 count的值 看看是否有数据重复
2490039877612601864 看着是这个数据重复了

暂时已经复现不了了。但很诡异。下次碰到再试下好了

好的 也可能是并发造成的 这个数据是怎么生成的

因为我们要压测所以拿着都是旧的数据单据。 但这些主键不是有冲突吗。所以就把旧数据 120万左右的数据delete了一下。 然后 select 查是没有数据了。但重复落库拉这些单的时候就发一有一单始终会报这个错,但Mybitas的参数看着又没什么问题。 有点诡异

好的 你们怎么导的数据?使用程序灌的数据么?

嗯对的程序业务逻辑落库的数据

后面再有问题了可以发出来再看看