支付系统数据库设计的关键问题



支付系统的核心无疑就是充值、扣费、转账。

假设现在是一个这样的账户表account(InnoDB):

filedtypeinfo
idbigint用户id
balancedecimal余额
update_timedatetime数据更新时间

充值的时候那么下面这条语句就可以解决:

UPDATE account SET balance = balance + 10.00, update_time = NOW() WHERE id=1;

但是扣费和转账这种操作就比较麻烦了。不是下面这条语句就可以解决的:

UPDATE account SET balance = balance - 10.00, update_time = NOW() WHERE id=1;

我们首先得判断账户余额是否足够,不够的话当然不能扣费,这意味着在UPDATE之前还得SELECT一遍。也就是:

1.SELECT FROM account WHERE id=1;

2.程序判断balance是否足够

3.UPDATE account SET balance = balance - 10.00, update_time = NOW() WHERE id=1;

但是这个余额判断过程在高并发不加锁的情况下是不可靠的。

我们下面只讨论下面的情况:

扣费考虑到并发扣费的情况,允许让其并发扣费,但是不应该允许账户余额为负数。

转账的话也是一样,相当于先从一个账户扣费,再给另一个账户充值,在一个事务内完成。

使用存储过程来解决问题:

  1. create procedure balanceaccount_balance_dec ( in_money decimal(8,2), in_uuid bigint, OUT statusint )
  2. BEGIN
  3. DECLARE from_account_balance decimal(8,2);
  4. START TRANSACTION;
  5. SELECT balance INTO from_account_balance FROM account
  6. WHERE uuid = in_uuid FOR UPDATE;
  7. IF from_account_balance>=in_money THEN
  8. UPDATE account SET balance = balance - in_money , update_time = NOW()
  9. WHERE uuid = in_uuid;
  10. COMMIT;
  11. SET status=1;
  12. ELSE
  13. ROLLBACK;
  14. SET status=0;
  15. END IF;
  16. END;

这样的话可以保证在更新时不会出现余额为负数的情况。

在线支付模块附加数据库SQL Server 2000 (1)将DataBase文件夹中的两个文件拷贝到SQL Server 2000安装路径下的Data文件夹中。 (2)打开SQL Server 2000中的“企业管理器”,然后展开本地服务器,在“数据库”数据项上单击鼠标右键,在弹出的快捷菜单中选择“所有任务”/“附加数据库”菜单项。 (3)将弹出“附加数据库”对话框,在该对话框中单击“ ”按钮,选择所要附加数据库的.mdf文件,单击“确定”按钮,即可完成数据库的附加操作。 将程序发布到Tomcat下 (1)将01、02文件夹拷贝到Tomcat安装路径下的webapps文件夹中。 (2)第1个实例需要将从支付宝获取的接口API打包成jar文件,打包后的目录如图所1.1示,然后将该jar文件与jsf-api.jar、jsf-impl、jstl-1.2.jar以及SQL Server 2000数据库驱动包(mssqlserver.jar、msutil.jar、msbase.jar)拷贝到Tomcat安装路径下的webapps\01\WEB-INF\lib文件。 说明:第2个实例需要将工行提供的两个类包icbc.jar和InfosecCrypto_Java1_02_JDK14+.jar,以及jsf-api.jar、jsf-impl、jstl-1.2.jar和SQL Server 2000数据库驱动包(mssqlserver.jar、msutil.jar、msbase.jar)拷贝到Tomcat安装路径下的webapps\ 02\WEB-INF\lib文件。 (3)选择开始菜单中的“所有程序\Apache Tomcat 6.0\Monitor Tomcat”命令,这时在windows的系统托盘中会显示标识Tomcat服务器启动状态的图标,如果显示为 ,则说明Tomcat服务器没有启动,这时可以在该图标上单击鼠标右键在弹出的快捷菜单中选择“Start Service”菜单项启动Tomcat服务器,启动后将显示为 。 (4)打开IE浏览器,在地址栏中输入http://localhost:8080/,进入“Tomcat软件管理”页面。 注意:8080为安装Tomcat时设置的端口号 。 (5)单击Tomcat Manager超链接,弹出“连接到 localhost”对话框。 (6)在用户名及密码处输入登录Tomcat的用户名和密码,单击【确定】按钮。 (7)进入“Tomcat应用程序管理”页面,在此页面中单击“01”、“02”,进入本程序主页面,完成Tomcat配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值