数据库面试题(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 表名 (列名);
相关推荐
烬羽33 分钟前
React Router 嵌套路由:一个 `Outlet` 引发的布局思考
react.js·面试·前端框架
mubei-12341 分钟前
SpringDAO的用法
java·开发语言·数据库
心灵Haven3 小时前
Centos7 + Mysql8.0
mysql·centos
星蓝_starblue3 小时前
零服务器、零数据库!开源growth-board,利用GitHub自动管理刷题/学习/求职全流程
服务器·数据库·程序人生·系统架构·node.js·github·改行学it
三8445 小时前
sqli-labs1-10通关笔记
数据库
Loveyourself6 小时前
你知道吗?详细揭秘cc中api层微压缩-microcompact
面试·agent
BullSmall7 小时前
Another Redis Desktop Manager(ARDM)下载指南
数据库·redis·缓存
SelectDB7 小时前
Apache Doris 倒排索引工作原理:全文检索提速 59 倍,点查提速 14 倍
数据库
码农颜7 小时前
5.1.1 原⼦性
数据库·mysql
机建狂魔7 小时前
Codex 接入第三方模型 API 实战:以 Mimo 为例
java·服务器·数据库·ai·ai编程·codex