什么是事务以及事务的四大特性?

简介:

● 必答内容:
事务是数据库中的基本概念,是指一组操作的集合,而这一组操作要么同时成功,要么同时失败,从而保证数据库中数据的正确性和完整性。
那事务呢,具有四大特性,也就是我们常说的ACID,分别是:原子性、一致性、隔离性、持久性。 那接下来,我就分别来聊聊这四大特性。
1). 原子性指的是事务中的这一组操作,是不可分割的最小操作单元了,操作要么全部成功,要么全部失败。
2). 一致性是指在事务操作的前后,必须使数据处于一致的状态。
3). 隔离性指的是数据库中提供了隔离机制,保证事务在不受外部并发操作的影响的独立环境中运行。
4). 持久性就比较简单了,就是事务一旦提交或回滚了,它对数据库的改变就是永久的。
● 可能继续发问的问题:
1). 你刚才提到了并发事务,那并发事务回引发哪些问题?
并发事务引发的问题,主要有这么几个:
● 脏读:就是一个事务,读取到了另一个事务还没有提交的数据。
● 不可重复读:指的是在同一个事务中,先后读取同一条记录,但两次读取的数据不同。
● 幻读:指的是一个事务按照条件查询数据时,没有对应的行,但是插入时,又发现这行数据已经存在了好像出现了幻觉。
2). 如何解决这些问题呢?
那这些问题,在数据库系统中都已经解决了。在数据库中提供了不同的隔离级别来解决这些问题, 分别有以下几种:
● READ UNCOMMITED :读未提交。 这种隔离级别下,会出现脏读、不可重复读、幻读问题。
● READ COMMITED:读已提交。 这种隔离级别,解决了脏读问题,但是会出现不可重复读、幻读问题。
● REPEATABLE READ:可重复读。这种隔离级别,解决了脏读、不可重复读问题,但是会出现幻读问题。
● SERIALIZABLE:串行化。解决了上述所有的并发事务问题。
而在MySQL数据库中,默认的隔离级别是 REPEATABLE READ(可重复读)。
3). 那为什么没有用SERIALIZABLE(串行化) 这种隔离级别呢?
其实,隔离级别,也不是越高越好。因为隔离级别高了,确实可以解决并发事务引发的问题,但是隔离级别越高,性能也越低。
2、索引基础
2.1 MySQL数据库索引的数据结构?
● 必答内容:
在MySQL中的索引类型有多种哈,比如像B+tree索引、Hash索引等,但在InnoDB存储引擎中默认使用的是B+tree的索引。
● 可能继续追问的问题:
1). B+tree索引结构的特点是什么?
● B+tree呢,也叫多路平衡搜索树,也就是一个节点中可以存储多个key,多个key,也就对应多个指针,大数据量的情况下,树的高度更低。(树的阶数更多,高度更低,检索更快)。
● 在B+tree中,所有的数据都是存放在叶子节点的,非叶子节点,仅仅起到索引数据的作用。
● 而在B+tree的叶子节点中,形成了一个双向链表,便于区间范围查询。
2). 那为什么MySQL数据库的索引结构要采用B+tree?
● 参考 2.4

相关文章
|
22小时前
|
Java
|
22小时前
|
存储 消息中间件 开发框架
应用架构图
在上一节有了业务架构的基础之上,当我们需要落地具体的技术方案时,此时就需要技术人员开始考虑技术架构了。技术架构是应接应用架构的技术需求,并根据识别的技术需求,进行技术选项,把各个关键技术和技术之间的关系描述清楚。 基础结构解决的主要问题包括:如何进行技术层面的分层、开发框架的选择、开发语言的选择、涉及非功能性需求的技术选择。由于应用架构体系是分层的,那么对应的技术架构体系自然也是分层的。大的分层有微服务架构分层模型,小的则是单个应用的技术分层框架。大的技术体系考虑清楚后,剩下问题就是根据实际业务考虑选择具体的技术点。各个技术点的分析、方案选择,最终形成关键技术清单,关键技术清单应考虑架构本身的
|
22小时前
|
存储 算法 Java
|
22小时前
|
Java 程序员 数据库连接
|
22小时前
|
Java
|
22小时前
|
Java 应用服务中间件 Linux
|
22小时前
|
存储 安全 Java
|
22小时前
|
Java 测试技术 Linux
生产环境发布管理
在一个大型团队中,生产发布是一件复杂的事情,从dev(前后端联调)-->test(测试集成&压力测试)-->pre(灰度测试)-->prod(生产环境)的多环境推进,以及生产环境的热更新、回滚等问题一直在困扰着各个公司,今天我将基于公司的自动化部署平台为大家讲解下我们是如何做到多环境部署。