目录
2. 第二种方式(设置MySQL事务不默认提交的方式)IDEA用的是第二种方式
1. 事务
默认一条sql语句就是一个事务,然后提交的状态。
1.1 概述
事务是数据库提供的一个特性。
事务:组成各个数据的执行的单元,要么都成功,要么都不成功。
1.2 转账的例子
转账的功能,冠希给美美转1000元钱。
- 使用事务
- 先给冠希扣除掉1000元
- 再给美美加上1000元
- 事务结束了
没提交,只回滚,钱又回去了。
代码示例:
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的数据库的事务不默认提交