数据库面试题(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 表名 (列名);
相关推荐
wowocpp1 小时前
查看 磁盘文件系统格式 linux ubuntu blkid ext4
linux·数据库·ubuntu
C吴新科4 小时前
MySQL入门操作详解
mysql
Ai 编码助手6 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
陈燚_重生之又为程序员7 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle7 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻7 小时前
MySQL排序查询
数据库·mysql
萧鼎7 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^7 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋37 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
荒川之神7 小时前
ORACLE _11G_R2_ASM 常用命令
数据库·oracle