[聚合文章] 常见并发问题

MySQL 2013-12-13 19 阅读
两个事务并发执行时间线

只以购物车中不存在该商品为例。当有两个添加购物车请求差不多同时到达的时候,第一个事务在commit之前,第二个事务是读取不到第一个事务中新插入的数据的。那么,导致的结果就是,两个请求都成功insert了数据,最终导致购物车中同一商品出现多条数据。

解决办法
  购物车的这种情况,还是比较容易解决的。分析一下,业务的特点是什么?没有就insert,有就update。这正好可以使用mysql的一个特性(注意,只是mysql的特性,不是sql表情语法)来实现:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

使用这种特性,首先要做的就是设置Unique key。在这里,根据业务分析,我们可以将userId和csuId设置成Unique key。这样就解决了问题。

重复下单

背景

  • 根据购物车下单
  • 下单完成后删除购物车中数据

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。