- (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