数据库面试题(MySQL、Oracle)

数据库

数据库的四大特性

原子性:

事务中的所有操作要么全部执行成功,要么全部执行失败,不存在部分执行的情况;成功必须要完全应用到数据库,失败则不能对数据库产生影响;

一致性:

事务在执行前后,数据库的状态必须保持一致性,即从一个一致性状态转移到另一个一致性状态,中间不会处于不一致状态。

隔离性:

当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要相互隔离。

持久性:

一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况下也不会丢失事务的操作。

脏读

脏读是指一个事务读取了未提交事务执行过程中(包换了多次的dml,但是未提交事务,随时可能回滚)的数据。当一个事务的操作正在多次修改数据,而在事务还未提交的时候,另外一个并发事务来读取了数据,就会导致读取到的数据并非是最终持久化之后的数据,这个数据就是脏读的数据。

不可重复读

不可重复读是一个事务执行过程中,另一事务提交并修改了当前事务正在读取的数据,导致当前事务读取到了不同的数据。(乐观锁实现原理,靠不可重复读触发数据不一致,来数据回滚)

幻读

幻读和不可重复读都是读取了已经提交的事务(这点同脏读不同),不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)

数据库的隔离等级

READ UNCOMMITTED (未提交读)

这是最低的隔离级别,它允许读取尚未提交的数据。这种隔离级别可能会导致脏读、不可重复读和幻读。

READ COMMITTED (提交读)

这是大多数数据库的默认隔离级别。它只允许读取已经提交的数据。可以避免脏读,但可能会导致不可重复读和幻读。

REPEATABLE READ (可重复读)

这种隔离级别保证了在事务处理过程中,对同一字段的多次读取结果是一致的。但它可能导致幻读(当新数据行被添加到查询结果集中时)。

SERIALIZABLE (序列化)

这是最高的隔离级别。通过对事务进行串行化执行来避免脏读、不可重复读和幻读的问题,但会降低数据库的并发性能

索引

优点:

  1. 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
  2. 可以加速表和表之间的连接
  3. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
  4. 创建唯一性索引,保证数据库表中每一行数据的唯一性;

缺点:

  1. 索引需要占物理空间
  2. 创建索引时需要较长时间
  3. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度
普通索引
sql 复制代码
create index 索引名 on 表(列);
alter table 表 add index 索引名(列);
唯一索引

不允许其中任何两行具有相同索引值的索引

sql 复制代码
alter table 表 add unique index 索引名(列);
主键索引
sql 复制代码
ALTER TABLE 表名 ADD CONSTRAINT 索引名 PRIMARY KEY (列名);

以上为Oracle和MySQL数据库共有索引

Oracle数据库独有索引
B树索引

Oracle中一般新建索引类型均为,通常用于该列值较多的情况

sql 复制代码
CREATE INDEX 索引名 ON 表名(列名);
位图索引

该索引适用于一些值较少列(例如表示状态、分类)

sql 复制代码
CREATE BITMAP INDEX 索引名 ON 表名 (列名);
相关推荐
SelectDB2 小时前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
Ruihong3 小时前
Vue withDefaults 转 React:VuReact 怎么处理?
vue.js·react.js·面试
kyriewen4 小时前
别再这样写 async/await 了:我在 Code Review 中见过最多的 8 个错误
前端·javascript·面试
烬羽9 小时前
字符串算法入门:从反转字符串到回文判断,面试不再慌
算法·面试
云技纵横9 小时前
一个 @Async,把 @Transactional 的事务边界打穿了
后端·面试
想要成为糕糕手9 小时前
Harness Engineering:大模型时代的“马鞍”——从记忆层开始,让AI真正为你所用
面试·ai编程·claude
kyriewen1 天前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
她的男孩1 天前
后台接口加密别只会 HTTPS,ForgeAdmin 的 RSA + SM4/AES 源码拆解
后端·面试·开源
Randyliu1 天前
20260508-Agent搭建记录以及对ReAct框架的理解
面试·agent
ZzT1 天前
公司用 AI 筛简历,他写了个 AI 帮你挑公司
面试·aigc·ai编程