oracle数据库定义语句DDL

余生颓废 提交于 2020-03-07 11:02:36

1、建表语句:

create table 表名(字段名 类型,字段名 类型);

--删除表:

drop table 表名;

--修改表:

alter table 表名 add 字段名 类型;

--修改字段:

alter table 表名 modify(字段名 类型);

--重命名字段:

alter table 表名 rename column 字段名 to 新字段名;

--重命名表 :

rename 表名to 新表名;

--删除字段:

alter table 表名 drop column 字段名;

 

 

2、序列(sequence)

--创建sequence

create sequence 序列名

[INCREMENT BY n]

[START WITH n]

[{MAXVALUE/ MINVALUE n| NOMAXVALUE}]

[{CYCLE|NOCYCLE}]

[{CACHE n| NOCACHE}];

 其中:

1)  INCREMENT BY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。

2)  START WITH 定义序列的初始值(即产生的第一个值),默认为1。

3)  MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。

4)  MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。

5)  CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。

6)  CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。

7)  NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用。

8)  CURRVAL 中存放序列的当前值,NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效。

 

--sequence使用:

select 序列名.nextval from dual;

--sequence修改:

alter sequence 序列名 incerment by 10 maxvalue10000 cycle  -- 到10000后从头开始 NOCACHE ;

 

 

3、索引(index)

--创建索引

create or replace unique|bitmap index <schema>.<index_name> on <schema>.<table_name> (<column_name>|<expression> asc|desc , <column_name>|<expression> asc|desc ...) tablespace <tablespace_name> storage <storage_settings> logging|nologging compute statistics nocompress|compress<nn> nosort|reverse partition|global partition<partition_setting>
  • unique|bitmap : unique表示唯一值索引,bitmap表示位图索引,为空则默认为B-tree索引
  • column_name|expression asc|desc , ... :可以单列索引,也可以多列进行联合索引,当为的时候,为“基于函数的索引”
  • tablespace : 制定存放索引的表空间(当表和索引在不同的表空间的时候,效率更高)
  • storage : 可以设置表空间的存储参数
  • logging|nologging : 是否对索引产生redolog(对于大表来说,可以设置为nologging从而来减少空间占用,提高效率)
  • compute statistics : 设置为创建索引时,收集统计信息
  • nocompress|compressnn : 是否使用“键压缩”(使用键压缩可以删除一个键列中出现的重复值)
  • nosort|reverse : nosort表示与表中相同的顺序进行创建索引,reverse表示使用与表中相反的顺序进行创建索引
  • partition|nopartition|global partition : 可以在分区表上和未分区表上对创建的索引进行分区

 

索引的特点

  1. 大大加快检索数据的速度
  2. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
  3. 加速表与表之间的连接
  4. 查询语句汇总含有分组或者排序的语句时,速度更快
  5. 查询的过程中,使用索引,使用优化隐藏器,从而提高系统的性能

索引的不足

  1. 创建和维护索引,比较耗费时间,随着数据量的增大而增大
  2. 创建索引,占一定的物理空间(聚簇索引,占用空间会更大)
  3. 在对表进行增删改的时候,索引相应的也需要进行动态的更新

比较适合建立索引的列的特点

  1. 经常需要搜索的列上
  2. 主键,一般建立唯一性索引,保持数据的唯一性
  3. 外键,提高表与表之间连接的速度
  4. 需要排序的列上
  5. where子句后边经常出现的字段
  6. 经常需要根据范围进行搜索的列上,比如日期

不适合建立索引的列的特点

  1. 很少进行搜索的列上
  2. 列取值比较少的列上
  3. blob类型的列上
  4. 修改频率比较高的列上

限制索引(建立了索引,但是无法使用)

  1. 使用不等于<> 、 != ,(不等于操作符一定会进行全表扫描)
  2. 使用is null 、 is not null (只要索引中出现一个null,那么这个索引就报废了。所以在建立索引的时候,一定要将准备建立索引的列设置为not null)
  3. 使用函数(where子句中含有trunc()、add_months()之类)的时候,sql优化器会自动忽略掉索引
  4. where子句中,进行了数据类型不匹配的比较,比如(where row_num = '1')的时候,生气了优化器会限制索引的使用

查询索引

  • dba_indexes
  • user_indexes
  • uesr_ind_columns

组合索引

  1. 索引中,包含不止一个列。
  2. 在Oracle9i之前,需要先使用前导索引,才能使用组合索引。

Oracle rowid

  实体表中,每一行都有rowid,通过每一行的rowid,Oracle提供了访问单行数据的能力。

选择性

  user_indexes中distinct_keys,选择性越高,那么索引返回的值就越少。

群集因子

  user_indexes中的clustering factor 越接近 leaf block的值的话,说明表中的数据越有序。

二元高度

  dba_indexes 的 Blevel列查看对应索引的二元高度,二元高度随着表的大小以及被索引的列中,值的范围的狭窄程度而变化。重建索引可以降低二元高度。

快速全表扫描

  允许Oracle执行一个全局索引的扫描操作,快速全表扫描可以快速读取B-tree索引上的所有树叶块。

跳跃式扫描

create index TT_index on TT(teamid,areacode);

select /*+ index(tt TT_index )*/ count(areacode) from tt;

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!