开发者进阿里必看的30道经典数据库面试题【附详细解析】

  • (6)rowid是联系表与DBF文件的桥梁

[](()索引特点

索引的特点

  • (1)索引一旦建立,** Oracle管理系统会对其进行自动维护**, 而且由Oracle管理系统决定何时使用索引

  • (2)用户不用在查询语句中指定使用哪个索引

  • (3)在定义primary key或unique约束后系统自动在相应的列上创建索引

  • (4)用户也能按自己的需求,对指定单个字段或多个字段,添加索引

需要注意的是:Oracle是自动帮我们管理索引的,并且如果我们指定了primary key或者unique约束,系统会自动在对应的列上创建索引

什么时候【要】创建索引

  • (1)表经常进行 SELECT 操作

  • (2)表很大(记录超多),记录内容分布范围很广

  • (3)列名经常在 WHERE 子句或连接条件中出现

什么时候【不要】创建索引

  • (1)表经常进行 INSERT/UPDATE/DELETE 操作

  • (2)表很小(记录超少)

  • (3)列名不经常作为连接条件或出现在 WHERE 子句中

索引优缺点:

  • 索引加快数据库的检索速度

  • 索引降低了插入、删除、修改等维护任务的速度(虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引)

  • 唯一索引可以确保每一行数据的唯一性,通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能

  • 索引需要占物理和数据空间

索引分类:

  • 唯一索引:唯一索引不允许两行具有相同的索引值

  • 主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空

  • 聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个

  • 非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个

[](()什么是事务?


什么是事务?

事务简单来说:一个Session中所进行所有的操作,要么同时成功,要么同时失败

ACID — 数据库事务正确执行的四个基本要素

  • 包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

一个支持事务(Transaction)中的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易。

举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样【A账户的钱没变,B账户的钱也没变】。

事例说明:

/*

  • 我们来模拟A向B账号转账的场景

  • A和B账户都有1000块,现在我让A账户向B账号转500块钱

  • */

//JDBC默认的情况下是关闭事务的,下面我们看看关闭事务去操作转账操作有什么问题

//A账户减去500块

String sql = "UPDATE a SET money=money-500 ";

preparedStatement = connection.prepareStatement(sql);

preparedStatement.executeUpdate();

//B账户多了500块

String sql2 = “UPDATE b SET money=money+500”;

preparedStatement = connection.prepareStatement(sql2);

preparedStatement.executeUpdate();

从上面看,我们的确可以发现A向B转账,成功了。可是**如果A向B转账的过程中出现了问题呢?**下面模拟一下

//A账户减去500块

String sql = "UPDATE a SET money=money-500 ";

preparedStatement = connection.prepareStatement(sql);

preparedStatement.executeUpdate();

//这里模拟出现问题

int a = 3 / 0;

String sql2 = “UPDATE b SET money=money+500”;

preparedSt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值