2、事务的特点
事务有4个特性,简写为ACID特性。
1)原则性:以转账操作为例,转出账户余额减少和转入余额增加是两个DML语句,但是必须作为一个不可分割的完整操作。要么同时成功,要么同时失败,只转出而没有转入显然是不可接受的。
2)一致性:无论是在事务前、事务中、事务后,数据库始终处于一致的状态。例如:转账前分别是2000和1000,总金额是3000,转账300后分别是1700和1300,总金额还是3000.这就叫做一致性。不一致就是在某个时间点查询到的总金额不是3000.
3)隔离性:在某个时间段,肯定有很多人都在转账,每个人的转账都是在自己的事务中,所以在一个数据库中,会有很多事物同时存在。虽然同时存在很多事物,但是事物之间不会相互影响。
4)持久性:如果事物提交成功,则数据修改永远生效,如果是回滚,则数据完全没有没修改,就相当于没有这件事情发生。
@H_301_0@二、索引
@H_301_0@ @H_301_0@1.索引是oracle的一个对象,是与表关联的可选结构,提供了一种快速访问数据的途径,提高了数据库检索性能。索引使数据库程序无需对整个表进行扫描,就可以在其中找到所需要的数据。就像书的目录,可以通过目录快速查找所需信 @H_301_0@息,无需阅读整本书。 @H_301_0@ @H_301_0@ @H_301_0@2.、索引的分类 @H_301_0@ @H_301_0@1)B树索引结构 @H_301_0@4、创建索引的语法 @H_301_0@create [unique] index 索引名称 on 表名(列名)[tablespace 表空间名称] @H_301_0@ @H_301_0@解释: @H_301_0@[unique]用于指定唯一索引,默认情况下为非唯一索引 @H_301_0@[tablespace]为索引指定表空间 @H_301_0@ @H_301_0@1)创建标准索引 @H_301_0@sql> CREATE INDEX index_name ON tablename(columnname) @H_301_0@TABLESPACE index_tbs; @H_301_0@2)重建索引 @H_301_0@sql> ALTER INDEX index_name REBUILD; @H_301_0@ @H_301_0@合并索引碎片 @H_301_0@sql>ALTER INDEX index_name COALESCE; @H_301_0@ @H_301_0@3)删除索引 @H_301_0@sql> DROP INDEX index_name; @H_301_0@例1: @H_301_0@1)在雇员表(emp)中,为雇员名称(ename)列创建b树索引。 @H_301_0@
n确保在定义索引的列中没有重复值
nOracle 自动在表的主键列上创建唯一索引
n使用CREATE UNIQUE INDEX语句创建唯一索引
@H_301_0@语法如下: @H_301_0@sql> CREATE UNIQUE INDEX index_name @H_301_0@ON tablename(columnname); @H_301_0@例:在薪水级别(salgrade)表中,为级别编号grade列创建唯一索引。 @H_301_0@位图索引适合低于基数的列,即该列的值是有限的几个。例如:雇员表中的工种(job)列,即便是几百万条雇员记录,工种也是有限的。Job列可以作为位图索引,类似的还有图书表中的图书类别列等。
@H_301_524@例:在雇员emp表中,为工种(job)列创建位图索引。
基本语法:
CREATE BITMAP INDEX emp_job_bit_idx ON emp(job);
6、组合索引
类似sqlserver的复合索引,在表内多列上创建索引。索引中的列不必与表中的列顺序一致,也不必相互邻接。
@H_301_0@
6、基于函数的索引
需要创建的索引需要使用表中一列或多列的函数或表达式,也可以将基于函数的索引创建为B树索引或位图索引。
sql> CREATE INDEX emp_ename_upper_idx
@H_301_0@ON tablename (UPPER(columnname));
@H_301_0@ @H_301_0@:在雇员(emp)表中,为雇员名称(ename)列创建小写函数索引 @H_301_0@6、创建索引的原则
n频繁搜索的列可以作为索引列
n经常排序,分组的列可以作为索引
n经常用作连接的列(主键/外键)可以作为索引
n将索引放在一个单独的表空间中,不要放在有回退段、临时段和表的表空间中
n对于大型索引而言,考虑使用NOLOGIN子句创建大型索引。
n根据业务数据发生频率,定期重新生成或重新组织索引,进行碎片整理。