银行转账功能(一)


        1、作为一个后端程序员,数据库是我们必须要掌握的重点之一,数据库相关的考点和面试重点肯定是事务(ACID)。

        思考:为什么要使用事务?不使用可以吗?

“ 转账(同地区、同银行)。

        思考:为什么要区分地区和银行?

       3、因为转账这个功能的后台实现是一个账户(账户甲)扣钱、一个账户(账户乙)加钱。所以说不可能让账户甲的款给扣除了,但是乙账户中的款未加成功,这样显然是不符合我们开发原则,也不会被银行和用户接受的,所以说这个需要用到事务,还用一种方式就是使用存储过程实现。不管使用什么方式实现,我们最终的结果就是为了保证数据的一致性。

        4、如果说是同一个银行,例如:账户甲和账户乙都是 上海徐汇区XX银行 的账户。那么这个转账就简单了:

        从  账户甲  转账  5000块  到 账户乙    —>

        那么业务流程就是,一系列权鉴之后(两个账号都存在的情况下,不存在的不考虑),查询用户甲的金额是否大于等于 5000块,如果说是的话,执行扣款操作。然后给账户乙进行加款操作。(这个动作可能不会在我们点击操作的时候立即执行,那可能就是存库(缓存),线程轮询待执行操作然后实现对DB的修改,也可能是通过消息队列实现,但是基本原理类似)。

        5、同地区、同银行,说白了,我们的前提条件自己就定了:同一个数据库(不考虑集群,因为集群的话也是只有一个主数据库(可以执行增删改的leader),别的都是用来select的)。

        同一个数据库进行转账就是:

        对账户甲进行扣款操作,

        对账户乙进行加款操作。

        目的:(保证数据的一致性)

        6、点我查看跨行转账