表
表的类型:
堆表 包含随机排列的可变长度的行。
索引组织的表 按索引键的顺序存储行。
索引群集 可以反规范化父子关系表,这样来自不同表的相关行就可以存储在一起。
哈希群集 要求随机分布行,这样可以打破依据条目序列的排序。
分区表 以单独的物理结构(分区)存储行,依据列的值分配行。
注意:表结构对SQL没有影响。对性能有影响。
使用列规范创建表:
语法:
CREATE TABLE [schema.]table [ORGANIZATION HEAP]
[column datatype [DEFAULT expression]]
[,column datatype [DEFAULT expression]];
举例:
-- Create table
-- create date :2018-01-18
-- authors :BlackHeart
create table HDM.CUX_BH_TEST_DATA(
id number not null,
l_name varchar2(200),
l_code varchar2(200) not null,
created_by NUMBER(15) not null,
creation_date DATE not null,
last_updated_by NUMBER(15) not null,
last_update_date DATE not null
)
tablespace HDM_DATA
pctfree 10
initrans 10
maxtrans 255
storage
(
initial 128K
next 128K
minextents 1
maxextents unlimited
);
注意:default子句无法通过子查询来生成默认值,只能指定字面值或者函数。
使用子查询创建表:
CREATE TABLE [schema.]table AS subquery;
更改表定义
1 添加列:
alter table epm add (job_id number);
2 修改列:
alter table epm modify (commission_pct number(4,2) default 0.05);
3 删除列:
alter table epm drop column commission_pct;
4 标记为未使用:
alter table epm set unused column job_id;
5 重命名列:
alter table epm rename column hire_date to recruited;
6 将表标记为只读:
alter table epm read only;
删除表
语法:
DROP TABLE [schema.]tablename;
举例:
drop table epm;
创建和使用临时表
语法:
CREATE GLOBAL TEMPORARY TABLE temp_tab_name
(column datatype [,column datatype])
[ON COMMIT {DELETE|PRESERVE} ROWS];
在临时表上执行的SQL命令速度远比针对永久表的命令快。
1 临时表不是永久表空间中的段。
2 针对临时表的DML不生成重做数据。