MySQL中的MVCC机制-事务

事务是什么

在 MySQL 中,事务是一组原子性的 SQL 操作,这些操作要么全部成功执行,要么全部不执行。就好像是一个不可分割的工作单元,保证了数据的一致性和完整性。也就是说MySQL服务同样会被多个客户端同时访问(MySQL内部采用多线程架构),所以此时多个执行流同时访问MySQL数据库中的内容,为了保障数据一致性与完整性就有了事务的概念。所以事务就要满足以下特性:原子性、一致性、隔离性、持久性(ACID)

事务版本支持

在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务, MyISAM 不支持。查看数据库引擎 show engines \G指令:

事务提交方式

  • 手动提交
  • 自动提交

查看事务提交方式: 

设置提交方式:

SET AUTOCOMMIT = 0; // 关闭自动提交
SET AUTOCOMMIT = 1; // 打开自动提交

开启事务后,数据库暂时停止自动提交功能,将后续的操作视为一个事务单元。而对于事务是否自动提交的设置只会对单SQL语句起作用,表明单SQL语句是否被当作一个事务进行提交。所以当设置自动提交以后,单SQL语句进行数据的CURD操作时,都会自动将该操作视作一个事务自动提交到数据库当中,使得修改立即生效,从而达到持久化的目的。 

事务启动与关闭

启动:

begin;/start transaction;

关闭:

commit;/rollback;

其中可以在启动事务执行中添加保存点 savepoint s1;然后回滚的时候可以rollback to s1;就直接回滚到保存点s1的位置,但此时并不会关闭事务。

事务的原子性与隔离性

  • 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
     
  • 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

事务隔离级别的认识

MySQL中的一个事物可能会有多条语句构成,所以在一个事务就会有三个阶段:执行前、执行中、执行后。而包保证事务得原子性就不运行事务执行中的过程被干扰,也就是用户层只能看到事务执行前和执行后的结果。而要保障事务的执行过程是原子性的就间接的有了隔离性特征,而对与不同的事务存在不同的干扰程度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CR0712

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值