JavaEE基础之 事务

目录

1. 事务

1.1 概述

1.2 转账的例子

1.3 在MySQL数据库中使用事务,提供两种方式(重点)

1. 第一种方式(使用命令的方式)

2. 第二种方式(设置MySQL事务不默认提交的方式)IDEA用的是第二种方式

1.4 在JDBC中操作事务(掌握)

1.5 事务的特性

1.6 不考虑事务的隔离性会引发的问题(理解)

1.7 设置事务的隔离级别(解决读的问题)

1.7.1 相关

 

1.7.2 演示脏读

 1.7.3 避免脏读和演示不可重复读

1.7.4 避免不可重复读

1.7.5 避免各种读


1. 事务

        默认一条sql语句就是一个事务,然后提交的状态。

1.1 概述

         事务是数据库提供的一个特性。

         事务:组成各个数据的执行的单元,要么都成功,要么都不成功。

1.2 转账的例子

转账的功能,冠希给美美转1000元钱。

  1. 使用事务
  2. 先给冠希扣除掉1000元
  3. 再给美美加上1000元
  4. 事务结束了

没提交,只回滚,钱又回去了。

代码示例:

 select * from account;

1.

update account set money=money-100 where name='bbb';

        默认这一条sql语句就是一个事务,自动提交结束。

        事务已经提交了,再回滚没用了。

1.3 在MySQL数据库中使用事务,提供两种方式(重点)

模拟转账。

1. 第一种方式(使用命令的方式)

start transaction; ‐‐ 开启事务
update account set money=money-100 where name='bbb';
select * from account;

 rollback;

回滚事务就结束了,事务回到原来的状态。

        再次回滚,不变,因为事务上次已经结束了。

 start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> update account set money=money-100 where name='bbb';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from account;
+----+------+-------+
| id | name | money |
+----+------+-------+
|  1 | aaa  | 0     |
|  2 | bbb  | 1000  |
+----+------+-------+
2 rows in set (0.00 sec)

mysql> update account set money=money+100 where name='aaa';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from account;
+----+------+-------+
| id | name | money |
+----+------+-------+
|  1 | aaa  | 100   |
|  2 | bbb  | 1000  |
+----+------+-------+
2 rows in set (0.00 sec)

事务回滚:

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from account;
+----+------+-------+
| id | name | money |
+----+------+-------+
|  1 | aaa  | 0     |
|  2 | bbb  | 1100  |
+----+------+-------+
2 rows in set (0.00 sec)

事务提交:

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> update account set money=money-100 where name='bbb';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update account set money=money+100 where name='aaa';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from account;
+----+------+-------+
| id | name | money |
+----+------+-------+
|  1 | aaa  | 100   |
|  2 | bbb  | 1000  |
+----+------+-------+
2 rows in set (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from account;
+----+------+-------+
| id | name | money |
+----+------+-------+
|  1 | aaa  | 100   |
|  2 | bbb  | 1000  |
+----+------+-------+
2 rows in set (0.00 sec)

事务提交之后事务就结束了,再次回滚不变。

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from account;
+----+------+-------+
| id | name | money |
+----+------+-------+
|  1 | aaa  | 100   |
|  2 | bbb  | 1000  |
+----+------+-------+
2 rows in set (0.00 sec)

2. 第二种方式(设置MySQL事务不默认提交的方式)IDEA用的是第二种方式

   MySQL数据库的事务是默认提交的。

        * update t_account set money = money ‐ 1000 where username = '冠希'; ‐‐ 这一条语句默认使用了一个事务。

   设置让MySQL的数据库的事务不默认提交

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值