JavaWeb开发之——事务(23)
一 概述
- 事务
- 事务语法
- 代码验证
- 事务的四大特征
二 事务
2.1 事务简介
- 数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。
- 事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败。
- 事务是一个不可分割的工作逻辑单元。
2.2 事务理解
这些概念不好理解,接下来举例说明,如下图有一张表
张三和李四账户中各有100块钱,现李四需要转换500块钱给张三,具体的转账操作为
- 第一步:查询李四账户余额
- 第二步:从李四账户金额 -500
- 第三步:给张三账户金额 +500
现在假设在转账过程中第二步完成后出现了异常第三步没有执行,就会造成李四账户金额少了500,而张三金额并没有多 500;这样的系统是有问题的。如果解决呢?使用事务可以解决上述问题
从上图可以看到在转账前开启事务,如果出现了异常回滚事务,三步正常执行就提交事务,这样就可以完美解决问题。
三 事务语法
3.1 开启事务
1 | START TRANSACTION; |
3.2 提交事务
1 | commit; |
3.3 回滚事务
1 | rollback; |
四 代码验证
4.1 SQL语句-准备
1 | DROP TABLE IF EXISTS account; |
4.2 不加事务演示问题
1 | -- 转账操作 |
整体执行结果肯定会出问题,我们查询账户表中数据,发现李四账户少了500。
4.3 添加事务sql如下:
1 | -- 开启事务 |
上面sql中的执行成功进选择执行提交事务,而出现问题则执行回滚事务的语句。以后我们肯定不可能这样操作,而是在 java中进行操作,在java中可以抓取异常,没出现异常提交事务,出现异常回滚事务。
在当前执行查询语句
数据库中查询
五 事务的四大特征
5.1 四大特征
- 原子性(Atomicity): 事务是不可分割的最小操作单位,要么同时成功,要么同时失败
- 一致性(Consistency) :事务完成时,必须使所有的数据都保持一致状态
- 隔离性(Isolation) :多个事务之间,操作的可见性
- 持久性(Durability) :事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
5.2 事务自动提交
mysql中事务是自动提交的。 也就是说我们不添加事务执行sql语句,语句执行完毕会自动的提交事务。 可以通过下面语句查询默认提交方式:
1 | SELECT @@autocommit; |
查询到的结果是1 则表示自动提交,结果是0表示手动提交。当然也可以通过下面语句修改提交方式
1 | set @@autocommit = 0; |