900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > mysql数据库事务实现方式_mysql事务的实现原理

mysql数据库事务实现方式_mysql事务的实现原理

时间:2023-03-02 23:13:57

相关推荐

mysql数据库事务实现方式_mysql事务的实现原理

1.什么是事务?

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成

2.事务的四大特性(ACID)2.1 Atomicity 原子性原子性是指事务是一个不可分割的单位,要么都发生,要么都不发生2.1.1 回滚日志

想要保证事务的原子性,就需要在异常发生时,对已经执行的操作进行回滚,而在 MySQL 中,恢复机制是通过回滚日志(undo log)实现的,所有事务进行的修改都会先记录到这个回滚日志中,然后在对数据库中的对应行进行写入。

回滚日志除了能够在发生错误或者用户执行 ROLLBACK 时提供回滚相关的信息,它还能够在整个系统发生崩溃、数据库进程直接被杀死后,当用户再次启动数据库进程时,还能够立刻通过查询回滚日志将之前未完成的事务进行回滚,这也就需要回滚日志必须先于数据持久化到磁盘上,是我们需要先写日志后写数据库的主要原因。

回滚日志并不能将数据库物理的恢复到执行语句或事务之前的样子,他是逻辑日志。2.2 Consistency 一致性一致性是指应用从一个正确的状态到另外一个正确的状态。ACID就是通过AID来保证C的。如何理解正确的状态呢?正确的状态就是我们需要约定的一些约束,比如张三账户有90元,如果他买东西需要花费100元,则买完以后账户余额就是-10元,那么-10元是不是一个正确的状态呢?答案是的。这是因为我们并没有约定账户字段不能为负。

2.3 Isolation 隔离性

多个事务并行处理时,相互应该没有影响

隔离级别:

1.读未提交

2.读已提交

3.可重复读(innodb)

4.串行化

脏读:读到其他事务未提交的更新数据,

幻读:一个事务,读取两次,得到的记录条数不一致

不可重复读: 重复读取后数据不一致

2.3.1 隔离级别的实现

其实也是多线程问题。所以使用并发控制机制,限制不同事务对同一资源的读写。这里介绍三种最重要的并发控制器机制的工作原理。

1.锁

mysql提供两种锁,共享锁和互斥锁,也叫读锁和写锁

2.时间戳

使用时间戳的话,就是乐观锁的实现方式,写入数据的时候先对数据进行修改,再判断时间戳是否变化过,如果没有,就更新,变了的话,就生成新的时间戳再次更新数据

3.多版本和快照隔离

通过维护多个版本的数据,数据库可以允许事务在数据被其他事务更新 时,去读取旧版本的数据。2.4 Duration 持久性持久性是指一旦事务被提交,他对数据库中数据的改变就是永久性的。

3.事务的状态:

Active:事务的初始状态,表示事务正在执行;

Partially Commited:在最后一条语句执行之后;

Failed:发现事务无法正常执行之后;

Aborted:事务被回滚并且数据库恢复到了事务进行之前的状态之后;

Commited:成功执行整个事务;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。