文章目录
1.事务的应用场景说明
什么是事务: 在实际的开发过程中,一个业务操作如:转账,往往是要多次访问数据库才能完成的。转账是一个用户扣钱,另一个用户加钱。如果其中有一条 SQL 语句出现异常,这条 SQL 就可能执行失败。
事务执行是一个整体,所有的 SQL 语句都必须执行成功。如果其中有 1 条 SQL 语句出现异常,则所有的SQL 语句都要回滚,整个业务执行失败。
2.手动提交事务
MYSQL 中可以有两种方式进行事务的操作:
- 手动提交事务
- 自动提交事务
2.1 手动提交事务的 SQL 语句
2.2 手动提交事务使用过程:
2.2.1 案例演示1 :事务提交
2.2.2 案例演示 2:事务回滚
3 自动提交事务
3.1 案例演示 3:自动提交事务
3.2 取消自动提交
4 事务原理
事务开启之后, 所有的操作都会临时保存到事务日志中, 事务日志只有在得到 commit 命令才会同步到数据表
中,其他任何情况都会清空事务日志(rollback,断开连接)
5 事务的隔离级别
5.1 事务的四大特性 ACID
5.2 事务引发并发访问的问题
5.3 MySQL 数据库有四种隔离级别
5.4 MySQL 事务隔离级别相关的命令
设置事务隔离级别,需要退出 MySQL 再重新登录才能看到隔离级别的变化
设置隔离级别 set global transaction isolation level 级别字符串;
5.5 脏读的演示
将数据进行恢复:UPDATE account SET balance = 1000;
- 打开 A 窗口登录 MySQL,设置全局的隔离级别为最低
mysql -uroot -proot
set global transaction isolation level read uncommitted;
2. 打开 B 窗口,AB 窗口都开启事务
use day23;
start transaction;
3. A 窗口更新 2 个人的账户数据,未提交
update account set balance=balance-500 where id=1;
update account set balance=balance+500 where id=2;
4. B 窗口查询账户
select * from account;
5. A 窗口回滚
rollback;
6. B 窗口查询账户,钱没了
解决脏读的问题:将全局的隔离级别进行提升
将数据进行恢复:
UPDATE account SET balance = 1000;
- 在 A 窗口设置全局的隔离级别为 read committed
set global transaction isolation level read committed;
8. A 更新 2 个人的账户,未提交
update account set balance=balance-500 where id=1;
update account set balance=balance+500 where id=2;
9. B 窗口查询账户
4. B 窗口查看账户