mysql-事务

什么是事务?

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

事务是如何实现的

mysql-事务_第1张图片
mysql-事务_第2张图片

怎么提交事务和回滚事务

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

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

所以我们此时回滚事务,是会将数据表的数据回到上一次的提交点,即最开始的那三条数据
mysql-事务_第5张图片

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

  • 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. 序列化读(最高的隔离级别)
    这是最高的隔离级别,效率最低,也最安全,解决看所有问题。
    表示事务排队,不能支持并发
  • 查看事务隔离级别
  • 四种隔离级别展示

你可能感兴趣的:(随笔记,mysql,数据库,database)