当用户首次创建收货地址时,自动设置为默认地址,之后用户添加新的默认地址或修改其他收货地址为默认收货地址时,原来的默认收货地址变更为非默认地址,如何设计保证在多线程情况下数据不会出错,一般这种需求
address 表加个is_default 字段默认为 0(不是默认) 1(默认)
第一次就读库,如果为空那么这次就是首次添加地址 则 is_default=1 否则为0
一般没有这么做吧,选择收货地址只是方便操作,选择完,订单信息会有一条对应的地址记录,即一个订单对应一个地址、姓名、电话。要不然,像你说的,选择了别的地址,其它的收货地址跟着改,这种需求不合理。
1.多线程出现问题的原因是多个线程的数据不可见性,即多个线程看到的数据都是各自为政的,所以在修改的时候会出现多个默认地址;
2.解决方案:select * from table for update,查询加锁,放在一个事务里,事务结束,锁消除
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
数据库加一个字段,判断是否为默认地址。例如:1默认0不默认,让1唯一