表其实是数据的‘容器’。oracle有几种类型的表:

  • 普通表(ordinary table)又叫堆组织表。
  • 聚簇表(clustered table)
  • 分区表(partition table)
  • 外部表(external table)
  • 临时表 (temporary table)
  • 索引组织表(index-Organized table IOT)

聚簇是表的一种特殊结构,一个聚簇有多个表组成,几个表共享相同的数据块。一个聚簇有一个或者多个公共的列,多个表共享这些列(聚簇关键字 Cluster Key)。

Oracle  把多个表的数据物理的存储在一起,以加速表的连接(join),这是聚簇的特点。

只有在创建聚簇后,才能在聚簇中创建表,在往聚簇表中插入数据之前必须在聚簇上创建聚簇索引。

在应用中满足下面的条件时才适合使用聚簇:

  • 建立聚簇表的目的是为了查询而不是为了修改,繁修改的表不适合创建成聚簇表;
  • 查询时,常常对聚簇中的多个表进行连接

创建聚簇表的步骤

  • 1,创建聚簇。
  • 2,把多个表加入到聚簇中(创建聚簇表)
   1: select tablespace_name  from dba_tablespaces;
   2: create cluster tb_cluster (postcode int) tablespace userdb;
   3: SQL> create table stu (
   4:   2  id int primary key,
   5:   3  name varchar2(20) not null,
   6:   4  postcode int)
   7:   5  cluster tb_cluster (postcode);
   8: SQL>  create table address_info (
   9:   2   postcode int primary key,
  10:   3   name varchar2(30),
  11:   4  detail varchar2(30))
  12:   5  cluster tb_cluster (postcode);
  13:  
  14: 表已创建。

创建索引组织表(index-Organized Table)

   1: create table stu(
   2: name varchar2(20) PRIMARY KEY,
   3: id NUMBER,
   4: detail  VARCHAR2(100))
   5: ORGAINZATION INDEX 
   6: TABLESPACE users 
   7: PCTTHRESHOLD 30
   8: INCLUDING detail
   9: OVERFLOW TABLESPACE myspace;

索引组织表中一定要有主键。ORGAINZATION INDEX 是指定创建的表示索引组织表,pctthreshold 是指定溢出比例,如果超过溢出比例的限制,则溢出部分讲被存储到溢出区中。

including 指定列名,表示从这个列以后的所有列将存储在溢出区中。overflow tablespace 指定溢出表空间。

创建外部表

先创建本地目录F:\temt\data F:\temt\bad F:\temt\log.

首先用sys身份创建目录对象,授权给用户 item

SQL> CREATE OR REPLACE DIRECTORY dat_dir AS 'f:\temtb\data';

目录已创建。

已用时间:  00: 00: 00.09
SQL> CREATE OR REPLACE DIRECTORY log_dir AS 'F:\temtb\log';

目录已创建。

已用时间:  00: 00: 00.04
SQL> CREATE OR REPLACE DIRECTORY bad_dir AS 'F:\temtb\bad';

目录已创建。

已用时间:  00: 00: 00.07
SQL> GRANT READ ON DIRECTORY dat_dir to item;

授权成功。

已用时间:  00: 00: 00.12
SQL> GRANT READ,WRITE ON DIRECTORY log_dir TO item;

授权成功。

已用时间:  00: 00: 00.01
SQL> GRANT READ,WRITE ON DIRECTORY bad_dir TO item;

授权成功。

连接item用户:

conn item

create table fitness_member
(id integer,
name VARCHAR2(14),
city VARCHAR2(30),
age int)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER    //指定访问的驱动是ORACLE_LOADER
DEFAULT  DIRECTORY dat_dir // 指定数据的默认存放路径
ACCESS PARAMETERS
(
  records delimited by newline   //一行为一条记录
  badfile bad_dir:'empxt%a_%p.bad'  //指定坏文件的名字及路径
  logfile log_dir:'empxt%a_%p.log'
fields terminated by ','  //指定字段之间是以逗号进行分割的
missing field VALUES are NULL
(id,name,city,age)
)
LOCATION ('temstu.txt')    //指定存放数据的文件的名字
   )
PARALLEL
REJECT LIMIT UNLIMITED;  //表示允许无限制的行发生错误

SQL> select * from fitness_member;

ID NAME           CITY                                  AGE
---------- -------------- ------------------------------ ----------
     50016 xiao1          shanghai                               22
     30021 xiao2          shanghai                               22
     30032 xiaoW           beijing                               23
     20033 xiaoZ          guangzhou                              24

已选择4行。

注释:一般情况下 %a 数据库的ID;%p 进程ID;

创建临时表

临时表用于 临时存放中间数据.

  • 创建事务型临时表
   1: create global temporary table gtt2
   2: (name varchar2(10),
   3: id number,
   4: birthday date)
   5: on commit delete rows;
  • 创建会话型临时表
   1: create global temporary table gtt2
   2:   (name varchar2(10),
   3:    id number,
   4:    birthday date)
   5:    on  commit preserve  rows;

修改表的定义

添加length列 alter table t add ( length number(8,3));

重命名列 alter table t rename column length to new_length;

改变列的属性 alter table t modify (new_length  not null | number (4,1) |encrypt using ‘3DES168’ |DECRYPT)…..非空、改变列的宽带、加密、解密

为 表手工分配一个新的分区  alter table t allocate extent (size 50K);

删除列 alter table t drop (length,address);

表管理技巧

将表移动到一个新的段 Segment

alter table t move

storage (

initial 20K

minextents 2

)

将表移动到其他表空间

alter table  t  move tablespace myspace2;

锁住表

lock table t

in exclusive mode

nowait; //行级锁

锁住指定行

select * from t where name =’**’ for update;

让一个列自动增长:

Oracle没有提供一种便捷的方法实现表中某列的自动增长,但是我们可以使用一种变通的方式实现表中某列的自动增长。

create table myorder
2 (order_NO NUMBER,
3 order_name VARCHAR2(20),
4 order_desc VARCHAR2(20));
create SEQUENCE seq_order_NO
2 START WITH 1
3 MAXVALUE 999999999999999999999999
4 MINVALUE 1
5 NOCYCLE
6 CACHE 100;
create or replace  TRIGGER trigger_myorder
2 BEFORE INSERT ON myorder
3 FOR EACH ROW
4 BEGIN SELECT seq_order_NO.NEXTVAL INTO :NEW.order_NO from dual;
5 END;
6 /
创建触发器,在插入数据之前每一行都出发,使order_NO自动自动增加,.NEXTVAL 表示取序列(seq_order_NO)的下一个值

SQL> INSERT INTO myorder

2 (order_name,order_desc)
3 VALUES
4 ('光盘采购','采购公司需要的光盘');

SQL> insert into myorder
2 (order_name,order_desc)
3 VALUES
4 ('大米','要采购来自美国的大米');

已创建 1 行。

SQL> select * from myorder;

ORDER_NO ORDER_NAME ORDER_DESC
---------- -------------------- --------------------
1 光盘采购 采购公司需要的光盘
2 大米 要采购来自美国的大米

可以看到 order_NO一列的值在自动增长。

Oracle 表结构管理的更多相关文章

  1. oracle表结构和表内容差异比对

    oracle表结构和表内容差异比对 oracle中有三种集合操作,他们会把左边和右边的select 结果集进行集合操作. union 并集 intersect 交集 minus 差集 假设有如下两张表 ...

  2. oracle表结构和表内容差异比对【原】

    oracle表结构和表内容差异比对 oracle中有三种集合操作,他们会把左边和右边的select 结果集进行集合操作. union 并集 intersect 交集 minus 差集 假设有如下两张表 ...

  3. Oracle 表结构、索引以及分区信息查询

    Oracle 表结构.索引以及分区信息查询 /* 获取表:*/ select table_name from user_tables; --当前用户的表 select table_name from ...

  4. Oracle表空间管理

    oracle表空间相关常用命令小结: 1.ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE;              //修改表空间数据文件类型 2.ALT ...

  5. oracle表结构

    表管理 新建表 语法 create table 表名 ( 列名1 类型(长度), 列名2 类型(长度), 列名3 类型(长度) ); create table:关键字,建表 后跟新建表的表名,表名长度 ...

  6. ORACLE表空间管理维护

    1:表空间概念 在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成. 如下图所示, ...

  7. Oracle表结构转换SqlSERVER表结构 脚本

    在审计工作中,有时需要将Oracle的表结构修改后再SqlSERVER中创建表结构,然后将数据导入到SqlSERVER中,在修改表结构的过程中方法狠多.手工修改,最蠢的方法,或者用工具UE批量修改,还 ...

  8. oracle 表空管理方式(LMT)、ASSM段管理方式、一级位图块、二级位图块、三级位图块。

    今天是2013-12-16,今天和明天是我学习oracle生涯中一个特殊的日子.今天晚上进行了一下表空间管理方式的学习,在此记录一下笔记. 对于oracle数据库最小i/0单位是数据块,最想分配空间单 ...

  9. 五、oracle 表的管理

    一.表名和列名的命名规则1).必须以字母开头2).长度不能超过30个字符3).不能使用oracle的保留字4).只能使用如下字符 a-z,a-z,0-9,$,#等 二.数据类型1).字符类char 长 ...

随机推荐

  1. Python 注释和键盘输入,输出数据格式化

    Python中的注释有单行注释和多行注释: Python中单行注释以 # 开头,例如: # 这是一个注释 print("Hello, World!") 多行注释用三个单引号 ''' ...

  2. 痞子衡嵌入式:深扒IAR启动函数流程及其__low_level_init设计对函数重定向的影响

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR启动函数流程及其__low_level_init设计对函数重定向的影响. 上一篇文章 <IAR下RT-Thread工程自定义 ...

  3. 设计模式学习-使用go实现观察者模式

    观察者模式 定义 适用场景 优点 缺点 代码实现 不同场景的实现方式 观察模式和发布订阅模式 参考 观察者模式 定义 观察者模式(Observer Design Pattern)定义了一种一对多的依赖 ...

  4. [luogu5180]支配树

    对于有向图$G$和起点$s$,有以下定义和性质-- 为了方便,不妨假设$s$能到达$G$中所有点,并任意建立一棵以$s$为根的dfs树,以下节点比较默认均按照两点在这棵dfs树上的dfs序 支配点:$ ...

  5. [atAGC034F]RNG and XOR

    令$N=2^{n}$先将$\forall 0\le i<N,a_{i}$除以$\sum_{i=0}^{N-1}a_{i}$,即变为概率 令$f_{i}$表示$i$的答案(第一次变成$i$的期望步 ...

  6. [bzoj1741]穿越小行星群

    将每一行/每一列作为一个点,对于一个障碍(x,y),要么第x行和第y列的状态(是否攻击)只需要有一个就可以了,将第x行和第y列连边,就是二分图的最小点覆盖=最大匹配数. 1 #include<b ...

  7. [luogu5654]基础函数练习题

    答案即区间$[l,r]$的笛卡尔树上,左右子树有一个为空的点到根路径和(定义此为的该点答案)的max, 对求区间笛卡尔树复杂度为$o(n)$,无法通过,因此在全局笛卡尔树中考虑此问题 设$k$为$l$ ...

  8. [bzoj1082]栅栏

    先二分答案,然后搜索暴力判断由于数据范围较大,需要剪枝:1.当前所有可能被用到的木板长度和(长度要不小于最小所需长度)>=所要拼成的所有木板的和:2.对于需求从大到小枚举木板(这样一开始枚举次数 ...

  9. [bzoj1113]海报

    ans肯定不会超过n,因为我们可以每一列都放一个矩阵考虑减小答案,肯定是要放横的,也就是让两个高度一样的矩阵同时被消除掉,那么中间不能存在比他们低的矩阵问题即判断一个点之前第一个小于等于它的点是不是等 ...

  10. Dapr初体验之服务调用

    初次理解服务调用 在微服务中,有一个难点就是:如果你想使用各个服务组件,你就得知道不同服务的地址和端口,也就是服务发现. 在传统应用我们是怎么做的?就是在web项目里配置上api地址,如下: 在一个w ...