研发在早期的设计中,由于设计方面的问题,导致在设计表结构的时候,有个表有非空唯一索引而没有主键
在InnoDB存储引擎中,如果没有主键的情况下,有非空唯一索引的话,非空唯一索引即为主键。
那么这就会有个问题存在
应用在更新表的时候,用了
update aaaa set xxx=xxx+(-1) where id=412 and xxx+(-1)>=0
用了ID作为条件,修改,高事务并发下,可能会同时发生这种事务,由于id并没有任何索引,故此,表会被全锁,也就是全表。那么如何避免这个问题。我们线上的数据
暂时还不是很大,故此
drop index idx_aaa_unique on goods_cost; alter table goods_cost add primary key(id); alter table goods_cost add constraint idx_aaa_unique unique (`xx`,`bb`);
如果直接插入主键,会报错。