- 论坛徽章:
- 1
|
现在有一个创建订单的存储过程,主要是插入用户信息到用户表,同时将订单信息插入订单表:
表userinfo字段:
- id; // 自增主键
- uid; // 唯一索引
- balance;
复制代码 表rechargeinfo:- id; // 自增主键
- uid;
- rechargetime;
- status;
- amount;
复制代码 部分存储过程如下:
- begin
- declare v_count int;
- declare v_status varchar(50);
- select count(uid) into v_count from userinfo where uid=p_userId;
- START TRANSACTION;
- if v_count <= 0 then
- insert into userinfo(uid, balance) values(p_userId, 0);
- end if;
- // ...
- commit;
复制代码 这里有一个check-then-act的if判断,线上观察,如果两个线程同时到达if,并且此时userinfo表中没有uid,都会进入insert,就会报Duplicate entry异常,不知道这里需要怎么修改? |
|