MySQL事务原理分析(1)之事务介绍与ACID特性

1 事务的介绍

1.1 事务的目的

事务将数据库从一种一致性状态转换为另一种一致性状态

1.2 事务的组成

事务可由一条非常简单的SQL语句组成,此时MySQL默认这是一条隐含的事务。不需要程序员手动的执行事务的开始语句和事务的提交语句。
也可以由一组复杂的SQL语句组成,需要程序员手动执行事务。

1.3 事务的特征

在数据库提交事务时,可以确保要么所有修改都已经保存,要么所有修改都不保存;
事务是访问并更新数据库各种数据项的一个程序执行单元。
在 MySQL innodb 下,每一条语句都是事务;可以通过 set autocommit = 0; 设置当前会话手
动提交;

1.4事务控制语句

--显示开启事务
START TRANSACTION
或者
BEGIN


----提交事务 并使得已对数据库做的所有修改进行持久化  语句为
COMMIT


----回滚事务,结束用户的事务,并且撤销正在进行的所有未提交的修改
ROLLBACK

-----创建一个保存点,一个事务可以有多个保存点
SAVEPOINT identifier

------ 删除一个保存点
RELEASE SAVEPOINT identifier


----- 事务回滚到保存点
ROLLBACK TO [SAVEPOINT] identifier

2 事务的ACID 特性

所有的事务都需要进行acid特性分析

原子性(A)

事务操作要么都做(提交),要么都不做(回滚);事务是访问并更新数据库各种数据项的一个程
序执行单元,是不可分割的工作单位;通过 undolog 来实现回滚操作。undolog 记录的是事务每
步具体操作,当回滚时,回放事务具体操作的逆运算;
例如
在这里插入图片描述
undolog 存储在共享表空间中

隔离性(I)

事务的隔离性要求每个读写事务的对象对其他事务的操作对象能相互分离,并发事务之间不会相互影响,设定了不同程度的隔离级别,通过适度破环一致性,得以提高性能;通过 MVCC 和 锁来实
现;MVCC 时多版本并发控制,主要解决一致性非锁定读,通过记录和获取行版本,而不是使用锁来限制读操作,从而实现高效并发读性能。锁用来处理并发 DML 操作;数据库中提供粒度锁的策略,针对表(聚集索引B+树)、页(聚集索引B+树叶子节点)、行(叶子节点当中某一段记录行)三种粒度加锁;

隔离性 隔离级别越高,mysql的并发效率越低,隔离级别越低,mysql并发性能越高
隔离性是mvcc和锁一起实现的。针对表,页,行进行加锁,让mysql的并发性能更高效。

持久性(D)

事务提交后,事务DML操作将会持久化(写入 redolog 磁盘文件 哪一个页 页偏移值 具体数
据);即使发生宕机等故障,数据库也能将数据恢复。redolog 记录的是物理日志;

一致性(C)

一致性指事务将数据库从一种一致性状态转变为下一种一致性的状态,在事务执行前后,数据库完
整性约束没有被破坏;一个事务单元需要提交之后才会被其他事务可见。例如:一个表的姓名是唯
一键,如果一个事务对姓名进行修改,但是在事务提交或事务回滚后,表中的姓名变得不唯一了,
这样就破坏了一致性;一致性由原子性、隔离性以及持久性共同来维护的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值