mysql-事务

什么是事务?

  • 一个事务一个完整的业务逻辑,要不同时成功,要不同时失败,不可再分。
  • 只有DML(insert,delete,update)语句才会有事务一说,其它语句和事务无关!!

事务是如何实现的

在这里插入图片描述
在这里插入图片描述

怎么提交事务和回滚事务

提交事务:commit;语句
回滚事务:rollback;语句
回滚永远只能回滚到上次的提交点,提交事务后就不可进行回滚
mysql是默认自动提交事务的,即每执行一条语句就提交一次事务,而这时候失败不能执行回滚的

所以我们需要先一条命令 “START TRANSACTION”:手动开启事务
在这里插入图片描述
可以看到当前数据表中三条数据,我们这时手动开启事务,并添加三条数据
在这里插入图片描述
这时候我们是可以回滚事务的,因为这时的数据是在一个日志文件中,并没有持久化到数据库表中,即我们现在所看到的数据是在日志文件中的,数据库并不会持久化的去保存这一系列数据(三条insert语句),而我们说到回滚事务是在回滚到上一次的提交点,那上一次的提交点在哪?就在我们第一次查看到 的那三条数据

所以我们此时回滚事务,是会将数据表的数据回到上一次的提交点,即最开始的那三条数据
在这里插入图片描述

我们也可提交事务,提交事务后本次事务不可再次回滚,数据也将持久化到数据库表中

  • commit --提交事务

事务的四大特性

  1. A: 原子性
    说明事务是一次完整的业务逻辑,不可再分
  2. C: 一致性
    再同一个事务中,所有操作要不同时成功,要不同时失败,以保证数据的一致性
  3. I: 隔离性
    A事务与B事务之间具有一定的距离
    A事务在操作一张表时,B事务也操作这张表会怎样?
  4. D: 持久性
    事务最终结束的一个保障。事务提交,就相当于将没有保存到硬盘(数据库中,而不是日志文件)上的数据保存到硬盘上!

事务的隔离的级别

事务A与事务B之间中一道墙,这道墙可以很厚,也可以很薄。这就是事务的隔离级别。
这道墙越厚,表示隔离级别就越高

事务和事务之间的隔离级别有哪些? 4个级别
  1. 读未提交(最低的隔离级别)
    A事务可以读取到B事务未提交的数据。
    存在问题:脏读现象
  2. 读已提交
    A事务只能读取到B事务提交之后的数据
    解决了脏读现象,但是不可重复读
    oracle数据库默认的隔离级别,这种隔离级别是比较真实的数据,每次读取的数据都是绝对的真实
  3. 可重复读
    A事务开启之后,不管是多久,每一次在事务A中读取到的数据都是一致的。即使事务B将数据已经改变,并且提交了,事务A读取到的数据还是没有发生改变。
    解决了不可重复读的现象,但是存在幻觉读
    mysql默认隔离级别就是可重复读!!!
  4. 序列化读(最高的隔离级别)
    这是最高的隔离级别,效率最低,也最安全,解决看所有问题。
    表示事务排队,不能支持并发
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值