mysql实操(四)—模拟实现用户充值和用户转账

理解事务

一、事务的概念
通俗版理解:
1.不止一个执行步骤
2.如果错了一个步骤,整个过程都不算数,也就是说要么执行,要么都不执行
3.在做事务的过程中,任何人都不能影响我
东北小品版理解:
执行事务就像把大象放冰箱,总共分三步,把冰箱门打开-》把大象放进冰箱-》帮冰箱门关上,如果这三步有一步没有成功,那大象和冰箱都要回到最初状态,而在放大象的过程中,本山大叔和丹丹姐都不能动大象和冰箱。
二、事务的格式
存储引擎为InnoDB时支持事务,实际上会自动提交commit,一般情况下当需要手动提交时,采用如下格式

start TRANSACTION;
......
COMMIT;/ROLLBACK;

自定义异常处理

在存储过程中发生异常时,要用自定义异常处理
格式:

DECLARE xxx1 HANDLER FOR xxx2 执行sql;
xxx1:CONTINUE|EXIT|UNDO
xxx2:SQLSTATE|SQLWARNING|NOT FOUND|SQLEXCEPTION

创建用户余额表

创建用户余额表,名为user_balance,存储引擎为InnoDB,表结构如下图

user_balance表结构

用户余额表中包括:id,用户id,用户余额


创建用户金额日志表

创建用户金额日志表,名为user_balance_log,存储引擎为InnoDB,表结构如下图

user_balance_log表结构

用户金额日志表包括:id,用户id,日志类型(1代表充值2代表消费3代表转账),日志备注,发生金额(可以为负值),发生时间(默认为CURRENT_TIMESTAMP)


并发控制

当多个线程对同一个对象进行操作的时候,如果不加控制往往会发生数据错误。而并发控制是确保及时纠正由并发操作导致的错误的一种机制,锁是一种常见的并发控制技术。
一、表级锁:将整个表都锁住,InnoDB和MyISAM都支持表级锁,随着并发的增多,执行的速度也会越来越慢
1.读锁:如果一张表是被读锁给锁住了,无论是本地会话还是外部会话(本地会话和外部会话来模拟类似php这样的多线程程序)都只能执行select操作而不能执行update操作(update insert delete),格式为

LOCK TABLE 表名 READ;
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值