
课程咨询: 400-996-5531
投诉建议: 400-111-8989
认真做教育 专心促就业
MySQL数据库的学习是大多数软件开发程序员都需要熟练掌握的一个编程技术,而本文我们就通过案例分析来简单了解一下,MySQL数据库事务基础知识分析。
1、事务有哪些特性?
事务是由MySQL的引擎来实现的,我们常见的InnoDB引擎它是支持事务的。
不过并不是所有的引擎都能支持事务,比如MySQL原生的MyISAM引擎就不支持事务,也正是这样,所以大多数MySQL的引擎都是用InnoDB。
事务看起来感觉简单,但是要实现事务必须要遵守4个特性,分别如下:
原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节,而且事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样;
一致性(Consistency):数据库的完整性不会因为事务的执行而受到破坏,比如表中有一个字段为姓名,它有约束,也就是表中姓名不能重复,如果一个事务对姓名字段进行了修改,但是在事务提交后,表中的姓名变得非性了,这就破坏了事务的一致性要求,这时数据库就要撤销该事务,返回初始化的状态。
隔离性(Isolation):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
持久性(Durability):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
2、InnoDB引擎通过什么技术来保证事务的这四个特性的呢?
持久性是通过redolog(重做日志)来保证的;
原子性是通过undolog(回滚日志)来保证的;
隔离性是通过MVCC(多版本并发控制)或锁机制来保证的;
一致性则是通过持久性+原子性+隔离性来保证;
这次将重点介绍事务的隔离性,这也是面试时常问的知识的点。
为什么事务要有隔离性,我们就要知道并发事务时会引发什么问题。
3、并行事务会引发什么问题?
MySQL服务端是允许多个客户端连接的,这意味着MySQL会出现同时处理多个事务的情况。
那么在同时处理多个事务的时候,就可能出现脏读(dirtyread)、不可重复读(non-repeatableread)、幻读(phantomread)的问题。
接下来,通过举例子给大家说明,这些问题是如何发生的。
脏读
如果一个事务「读到」了另一个「未提交事务修改过的数据」,就意味着发生了「脏读」现象。
举个栗子。
假设有A和B这两个事务同时在处理,事务A先开始从数据库中读取小林的余额数据,然后再执行更新操作,如果此时事务A还没有提交事务,而此时正好事务B也从数据库中读取小林的余额数据,那么事务B读取到的余额数据是刚才事务A更新后的数据,即使没有提交事务。
因为事务A是还没提交事务的,也就是它随时可能发生回滚操作,如果在上面这种情况事务A发生了回滚,那么事务B刚才得到的数据就是过期的数据,这种现象就被称为脏读。
不可重复读
在一个事务内多次读取同一个数据,如果出现前后两次读到的数据不一样的情况,就意味着发生了「不可重复读」现象。
举个栗子。
假设有A和B这两个事务同时在处理,事务A先开始从数据库中读取小林的余额数据,然后继续执行代码逻辑处理,在这过程中如果事务B更新了这条数据,并提交了事务,那么当事务A再次读取该数据时,就会发现前后两次读到的数据是不一致的,这种现象就被称为不可重复读。
幻读
在一个事务内多次查询某个符合查询条件的「记录数量」,如果出现前后两次查询到的记录数量不一样的情况,就意味着发生了「幻读」现象。
举个栗子。
假设有A和B这两个事务同时在处理,事务A先开始从数据库查询账户余额大于100万的记录,发现共有5条,然后事务B也按相同的搜索条件也是查询出了5条记录。
接下来,事务A插入了一条余额超过100万的账号,并提交了事务,此时数据库超过100万余额的账号个数就变为6。
然后事务B再次查询账户余额大于100万的记录,此时查询到的记录数量有6条,发现和前一次读到的记录数量不一样了,就感觉发生了幻觉一样,这种现象就被称为幻读。
4、事务的隔离级别有哪些?
前面我们提到,当多个事务并发执行时可能会遇到「脏读、不可重复读、幻读」的现象,这些现象会对事务的一致性产生不同程序的影响。
脏读:读到其他事务未提交的数据;
不可重复读:前后读取的数据不一致;
幻读:前后读取的记录数量不一致。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。