电子商城网站开发 pdf,网站开发人员主要干什么的,网站模板漏洞,360建筑网介绍目录
前言
1.事务的特性是什么?可以详细说一下吗?
2.并发事务带来哪些问题#xff1f;怎么解决这些问题呢#xff1f;Mysql的默认隔离级别是#xff1f;
3.undo log和redo log的区别。
4.事务中的隔离性是如何保证的#xff08;解释一下MVCC#xff09;?
5.主从同…
目录
前言
1.事务的特性是什么?可以详细说一下吗?
2.并发事务带来哪些问题怎么解决这些问题呢Mysql的默认隔离级别是
3.undo log和redo log的区别。
4.事务中的隔离性是如何保证的解释一下MVCC?
5.主从同步原理。
6.项目用过分库分表吗
总结 前言
本文主要介绍了Mysql事务面试题相关的面试题目。 1.事务的特性是什么?可以详细说一下吗?
原子性(Atomicity) 事务是不可分割的最小操作单元要么全部成功要么全部失败。
一致性(Consistency) 事务完成时必须使所有的数据都保持一致状态。
隔离性(Isolation)数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行。
持久性(Durability)事务一旦提交或回滚它对数据库中的数据的改变就是永久的。
参考回答ACID分别指的是原子性、一致性、隔离性、持久性。举个例子A向B转账500转账成功A扣除500元B增加500元原子操作体现在要么都成功要么都失败。在转账的过程中数据要一致A扣除了500B必须增加500。在转账的过程中隔离性体现在A向B转账不能受其他事务干扰。在转账的过程中持久性体现在事务提交后要把数据持久化可以说是落盘操作)。
2.并发事务带来哪些问题怎么解决这些问题呢Mysql的默认隔离级别是
并发事务的问题
脏读一个事务读到另外一个事务还没有提交的数据。
不可重复读一个事务先后读取同一条记录但两次读取的数据不同。
幻读一个事务按照条件查询数据时没有对应的数据行但是在插入数据时又发现这行数据已经存在好像出现了”幻影”。
隔离级别和问题
Read uncommitted 未提交读 脏读、不可重复读、幻读
Read committed 读已提交 不可重复读、幻读
Repeatable read 可重复读 幻读
Serializable 串行化
参考回答 在项目开发中多个事务并发进行是经常发生的并发也是必然的有可能导致一些问题第一是脏读当一个事务正在访问数据并且对数据进行了修改而这种修改还没有提交到数据库中这时另外一个事务也访问了这个数据因为这个数据是还没有提交的数据那么另外一个事务读到的这个数据是”脏数据”依据”脏数据”所做的操作可能是不正确的第二是不可重复读比如在一个事务内多次读同一数据在这个事务还没有结束时另一个事务也访问该数据那么在第一个事务中的两次读数据之间由于第二个事务的修改导致第一个事务两次谈取的数据可能不太一样这就发生了在一个事务内两次读到的数据是不一样的情况因此称为不可重复读第三是幻读幻读与不可重复读类似它发生在一个事务(T1) 读取了几行数据接着另一个并发事务(T2)插入了一些数据时在随后的查询中第一个事务(T1)就会发现多了些原本不存在的记录就好像发生了幻觉一样所以称为幻读。 解决这些问题的解决方案是对事务进行隔离Mysql支持四种隔离级别分别有第一个是未提交读它解决不了刚才提出的所有问题一般项目中也不用这个第二个是读已提交它能解决脏读的问题的但是解决不了不可重复读和幻读第三个是可重复读它能解决脏读和不可重复读但是解决不了幻读这个也是Mysql默认的隔离级别第四个是串行化它可以解决刚才提出来的所有问题但是由于让是事务串行执行的性能比较低。所以我们一般使用的都是Mysql默认的隔离级别可重复读。
3.undo log和redo log的区别。
redo log记录的是数据页的物理变化服务宕机可用来同步数据。
undo log记录的是逻辑日志当事务回滚时通过逆操作恢复原来的数据。
redo log保证了事务的持久性undo log保证了事务的原子性和一致性。
参考回答其中redo log日志记录的是数据页的物理变化服务宕机可用来同步数据而undo log不同它主要记录的是逻辑日志当事务回滚时通过逆操作恢复原来的数据比如我们删除一条数据的时候就会在undo log日志文件中新增一条delete语句如果发生回滚就执行逆操作。redo log保证了事务的持久性undo log保证了事务的原子性和一致性。
4.事务中的隔离性是如何保证的解释一下MVCC?
Mysql中的多版本并发控制指维护一个数据的多个版本使得读写操作没有冲突。
隐藏字段:
trx_id(事务id)记录每一次操作的事务id是自增的。
roll_pointer(回滚指针)指向上一个版本的事务版本记录地址。
undo log:
回滚日志存储老版本数据。
版本链多个事务并行操作某一行记录记录不同事务修改数据的版本通过roll_pointer指针形成一个链表
readView解决的是一个事务查询选择版本的问题
根据readView的匹配规则和当前的一些事务id判断该访问那个版本的数据。
不同的隔离级别快照读是不一样的最终的访问的结果不一样。RC每一次执行快照读时生成ReadView。RR仅在事务中第一次执行快照读时生成ReadView后续复用。
参考回答事务的隔离性是由锁和mvcc实现的。其中mvcc的意思是多版本并发控制。指维护一个数据的多个版本使得读写操作没有冲突它的底层实现主要是分为了三个部分第一个是隐藏字段第二个是undo log日志第三个是readView读视图。隐藏字段是指在Mysql中给每个表都设置了隐藏字段有一个是trx_id(事务id)记录每一次操作的事务id是自增的另一个字段是roll_pointer(回滚指针)指向上一个版本的事务版本记录地址。undo log主要的作用是记录回滚日志存储老版本数据在内部会形成一个版本链在多个事务并行操作某一行记录记录不同事务修改数据的版本通过roll_pointer指针形成一个链表。readView解决的是一个事务查询选择版本的问题在内部定义了一些匹配规则和当前的一些事务id判断该访问那个版本的数据不同的隔离级别快照读是不一样的最终的访问的结果不一样。如果是rc隔离级别每一次执行快照读时生成ReadView如果是rr隔离级别仅在事务中第一次执行快照读时生成ReadView后续复用。
5.主从同步原理。
Mysql主从复制的核心就是二进制日志binlog(DDL(数据定义语言)语句和 DML(数据操纵语言)语句)。
主库在事务提交时会把数据变更记录在二进制日志文件 Binlog 中。
从库读取主库的二进制日志文件 Binlog写入到从库的中继日志 Relay Log。
从库重做中继日志中的事件将改变反映它自己的数据。
参考回答Mysql主从复制的核心就是二进制日志二进制日志记录了所有的DDL语句和DML语句。具体的主从同步过程大概的流程是这样的:
Master 主库在事务提交时会把数据变更记录在二进制日志文件 Binlog 中。从库读取主库的二进制日志文件 Binlog写入到从库的中继日志 Relay Log。slave重做中继日志中的事件将改变反映它自己的数据。
6.项目用过分库分表吗
业务介绍
根据自己简历上的项目想一个数据量较大的业务(请求数多或业务累积大)。
达到了什么样的量级(单表1000万或超过20G)。
具体拆分策略
水平分库将一个库的数据拆分到多个库中解决海量数据存储和高并发的问题sharding-sphere、mycat。
水平分表解决单表存储和性能的问题sharding-sphere、mycat。
垂直分库根据业务进行拆分高并发下提高磁盘IO和网络连接数。
垂直分表冷热数据分离多表互不影响。 总结
本文主要介绍了Mysql事务面试题相关的面试题目。