欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > mysql-05.事务

mysql-05.事务

2025/8/6 20:53:10 来源:https://blog.csdn.net/ybq19513345431/article/details/145328321  浏览:    关键词:mysql-05.事务

目录

什么是事务?

为什么要使用事务?

使用:

开启事务: start transaction;

多条sql语句;

回滚/提交:rollback/commit;

回滚的实现:

事务的特性

事务的并发执行存在的问题:

1.脏读问题 :

2.不可重复读:

3.幻读:

四种隔离级别:


什么是事务?

事务是逻辑上的一组操作,组成这组操作的单元,要么全部成功,要么全部失败.

为什么要使用事务?

假设现在有一个转账操作,A需要向B转账500,A转账之后,A卡上的钱已经扣除成功;此时,服务器崩了,或服务器崩了,或机器断电,B卡上还未收到钱,这就是严重的错误了.

事务就是让一些操作一气呵成,为了避免上述问题,

事务把多个sql语句打包成一个整体,保证这些sql要么全部正确执行,要么一条也不执行.这就是事务的其中一个特性"原子性".

使用:

开启事务: start transaction;

多条sql语句;

回滚/提交:rollback/commit;

commit是正确执行完所有的sql语句,执行结束;

rollback是执行sql语句过程中出现错误,主动触发回滚.

回滚的实现:

通过日志的方式,在日志中记录sql中关键的更新操作,即时是断电,当再次重新启动主机后,mysql也会重新启动,就会发现回滚日志中有一些要 回滚的操作,就可以完成回滚了.

事务的特性

1.原子性: 要执行的sql语句,要么全部正确执行,要么一条也不执行(通过回滚实现).

2.一致性: 规定了事物提交前后,只存在事务提交前的状态 和 事务提交后的状态, 从一个一致性的状态到另一个一致性状态,不可能出现中间状态.

3.持久性: 一个事务一旦提交后,数据库就永远发生了改变,是对硬盘的修改。

4.隔离性:由于事务是原子性,一致性的,因此事务的执行是原子化的;可以多个事务并发执行,且各个事务执行是互不干的。

事务的并发执行存在的问题:

由于事务的执行是原子操作,因此可以多个事务并发执行,但在并发执行的过程中,又可能存在一些问题:

1.脏读问题 :

事务A正在写数据,事务B正在读数据,当A修改了之前的数据,导致B之前读到的数据就是过时的/错误的。边写边读就会出现这种问题。

解决脏读问题:对写操作加锁,当执行写操作的时候,不能读,只有提交了,才能执行读操作。

这就会导致并发性降低,隔离性提高,执行效率降低,数据的准确性提高了。

2.不可重复读:

对写操作加锁,解决了脏读问题。当事务B执行读操作的时候,事务A执行写操作,提交之后,B在多次读取 同一份数据的时候,就会发现读取到的结果不一样。边读边写就会引发这样的问题。

解决不可重复读问题:对读操作也加锁;执行读操作的时候,不能执行写操作,执行写操作的时候,不能执行读操作。

这就会再次导致 并发性降低,隔离性提高,执行效率降低,数据的准确性提高。

3.幻读:

对读操作加锁 和对写操作加锁解决了脏读和不可重复读问题,但当对A文件执行读操作,不能对A文件执行写操作,但可以对别的文件执行 B执行写操作。这就可能导致对A文件执行多次读操作的时候,数据的内容没有变,但产生了不同的结果集。这就是幻读。

解决幻读问题引入串行化的方式,执行事务的时候,串行执行事务。这样操作就不存在并发执行了,保证了完全串行化执行事务,隔离性最高,执行效率最低,数据的准确性最高。

对于不同的应用场景,需要的执行效率、数据的准确性是不同的,具体问题具体分析。

mysql提供了“隔离级别”的概念,在mysql的配置文件中可以对隔离级别进行修改。

四种隔离级别:

隔离类型说明并发性执行速度隔离性数据准确性

read uncommitted

(读未提交)

可边读边写最高最快最差最低

read committed

(读已提交)

引入写加锁,写的时候不允许读较高↓较快↓较差↑较低↑

repeatable read

(可重复度)

引入写加锁和度加锁,读的时候不能写,写的时候不能读一般↓一般↓较好↑较高↑

serializable

(串行化)

严格按照串行执行事务,一个一个执行最慢↓最好↑最高↑

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词