Fecmall 事务

fecmall事务指的是数据库层面的事务 在执行过程中要么一起成功要么一起失败

Fecmall事务介绍

fecmall中的事务用的比较少,只有一些非常需要事务的地方才用 ,大致在3处使用了事务,加入购物车,优惠券,生成订单,以及库存扣除等部分使用了mysql事务 ,有的是部分使用,而不是全部,因为有一些失败了并没有太大的影响。

1.譬如生成订单的时候需要清空购物车,即使生成了订单,没有清空购物车 但这又没有太大的影响,因此事务应用的比较少,

2.services里面没有添加任何事务,事务的使用是在controller和 block层, services层如果您一定要在里面使用,那么您二开的时候一定要 规避事务嵌套,一个事务没有结束又嵌套另外一个事务会出问题。

3.mysql事务操作中,读过的数据,会被上读锁,事务未结束前, 读的数据是不允许做更新删除操作,因此,事务操作,where条件一定 要做到索引搜索(覆盖索引,这样会使用mysql innodb的行锁),不然innodb会进行锁表, 譬如update user set sex = 'men' where name = 'xxxx' ,如果使用innodb, user表的name字段没有索引,那么update操作会锁表, 如果name字段有索引,那么只会锁相应的行,这个了解innodb的原理就会明白

5.对于mysql的操作,一般解决 锁表的问题 和 索引的问题,基本可以解决90%的问题,基本可以解决90% 的问题,当然锁的问题除了事务类操作,也有一部分是索引导致的,可以通过 索引,将表锁搞成行锁 ,因此,在更新操作,删除操作的过程中,一定要注意,不要锁表, 而应该锁行。