Loading

Mysql事务学习笔记

1. 什么是事务

通俗的说就是:保证一组sql语句要么全部执行成功,要么全部失败,不会出现中途失败。
并不是所有数据库引擎都支持事务,MyISAM就不支持事务。

例如:收款100,余额+100。若收款操作执行成功后,余额增加的操作却失败了,这就出现了错误。使用事务便可防止这一错误的出现,即保证收款和余额的操作都成功后才提交事务,中途一旦执行失败则放弃此次事务的提交并回滚所有操作。

2. 特性

  1. 原子性

一个事务中的所有操作要么全部成功要么全部失败,不会在结束在中途某个环节。若某个操作执行失败则回滚所有操作,还原到这个事务开始前的样子。

  1. 一致性

一个事务执行之前和执行之后数据库都必须处于一致性状态。在事务执行的过程中,只要事务未提交,就不会改变数据库的状态。提交之后事务已完成,此时数据库状态发生变化。

  1. 隔离性

事务在执行过程中与外界完全隔离的,即使数据库发生了变更,事务中也获取不到。A 事务对数据库做的变更,在事务未提交之间,数据库中也看不到,B 事务中也看不到。
隔离性可以防止多个事务并发执行导致数据的不一致。

  1. 持久性

事务处理结束后,对数据的修改是永久的

3. 隔离级别

关于事务的特性中有一项隔离性,而隔离性实际上还可以划分为4个等级,如下:

  1. 读未提交
    一个事务未提交时,它所做的变更可以被其他事务读到。
    最低级别,这将产生4个常见问题(脏读、不可重复读、幻读、丢失更新

  2. 读已提交
    一个事务要提交后,它所做的变更才能被其他事务读到。
    解决了脏读问题,还存在3个常见问题(不可重复读、幻读、丢失更新)

  3. 可重复读
    在开始读取数据(事务开启)时,不再允许修改操作 。
    解决了脏读和不可重复读,还存在2个常见问题(幻读、丢失更新)。

  4. 串行化
    将事务按一定顺序去执行。单个事务对某一行的操作会加锁,在锁释放掉之前,其它的事务都无法对这一行的记录进行操作。必须等之前的事务执行完毕,释放锁。后面的事务又会重新加锁。

参考:
MySQL事务之不可重复读问题
MySQL 什么是事务?

posted @ 2021-05-17 13:03  木头人4216  阅读(40)  评论(0编辑  收藏  举报