FateBboy 2018-03-12 09:42 采纳率: 0%
浏览 1680
已结题

mysql不加唯一索引并发插入出现问题

 CREATE TABLE IF NOT EXISTS `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '用户id',
  `order_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '订单id',
  `open_id` varchar(124) NOT NULL,
  `is_repeat` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否重复,0为有效,1为无效',
  `money` decimal(4,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '每次用户收益,只有is_repeat=0才加收益',
  `add_time` int(10) NOT NULL COMMENT '时间',
  PRIMARY KEY (`id`),
  KEY `idx_open_id` (`open_id`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

逻辑我现在这么写的:
$orderData = $db->query("SELECT * FROM order WHERE open_id ='useropenid AND is_repeat = 0 );

        //开启事务

if(empty($orderData )){
INSERT INTO VALUE ('', 1,1,'useropenid',1)//加订单纪录 这里最主要是看openid跟is_repeat 两个字段
UPDATE user SET amount = amount + 0.3 ..... //用户账户加收益
//提交事务

} else{
INSERT INTO VALUE ('', 1,1,'useropenid',1)//加订单纪录 这里 is_repeat 变为1
//回滚
}

如果上端触发这里多次,可能会操作多次。。。特别是这个open_id只提交一次这个订单但是给这个open_id用户加了多次收益

请问得各位前辈,教我这个处理逻辑 感激不尽!!!

  • 写回答

5条回答 默认 最新

  • qq_16466977 2018-03-12 10:19
    关注

    INSERT INTO VALUE ('', 1,1,'useropenid',1)

    评论

报告相同问题?

悬赏问题

  • ¥50 comsol稳态求解器 找不到解,奇异矩阵有1个空方程返回的解不收敛。没有返回所有参数步长;pid控制
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功