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

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

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

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

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

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

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

创建聚簇表的步骤

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

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

  1. 1: create table stu(
  1. 2: name varchar2(20) PRIMARY KEY,
  1. 3: id NUMBER,
  1. 4: detail VARCHAR2(100))
  1. 5: ORGAINZATION INDEX
  1. 6: TABLESPACE users
  1. 7: PCTTHRESHOLD 30
  1. 8: INCLUDING detail
  1. 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. 1: create global temporary table gtt2
  1. 2: (name varchar2(10),
  1. 3: id number,
  1. 4: birthday date)
  1. 5: on commit delete rows;
  • 创建会话型临时表
  1. 1: create global temporary table gtt2
  1. 2: (name varchar2(10),
  1. 3: id number,
  1. 4: birthday date)
  1. 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没有提供一种便捷的方法实现表中某列的自动增长,但是我们可以使用一种变通的方式实现表中某列的自动增长。

  1. create table myorder
  2. 2 (order_NO NUMBER,
  3. 3 order_name VARCHAR2(20),
  4. 4 order_desc VARCHAR2(20));
  5. create SEQUENCE seq_order_NO
  6. 2 START WITH 1
  7. 3 MAXVALUE 999999999999999999999999
  8. 4 MINVALUE 1
  9. 5 NOCYCLE
  10. 6 CACHE 100;
  1. create or replace TRIGGER trigger_myorder
  2. 2 BEFORE INSERT ON myorder
  3. 3 FOR EACH ROW
  4. 4 BEGIN SELECT seq_order_NO.NEXTVAL INTO :NEW.order_NO from dual;
  5. 5 END;
  6. 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. React + 导入模块的一个错误

    导入模块的时候出现这个错误: Attempted import error: 'd3' does not contain a default export (imported as 'd3'). 把导 ...

  2. 『学了就忘』Linux基础命令 — 37、Linux中挂载操作的相关命令

    目录 1.mount命令介绍 (1)mount命令说明 (2)mount命令格式 2.mount命令示例 3.mount -a命令说明 4.-o特殊选项说明 5.exec/noexec选项说明 挂载就 ...

  3. c++学习笔记(十一)

    函数重载(overloading) 概念 重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数.类型或者顺序)必须不同, ...

  4. Django笔记&教程 3-1 模板(Template)基础

    Django 自学笔记兼学习教程第3章第1节--模板(Template)基础 点击查看教程总目录 1 介绍 模板文件:让Django能够自动生成html代码 作为一个web框架,Django需要需要在 ...

  5. 性能优化 | Go Ballast 让内存控制更加丝滑

    关于 Go GC 优化的手段你知道的有哪些?比较常见的是通过调整 GC 的步调,以调整 GC 的触发频率. 设置 GOGC 设置 debug.SetGCPercent() 这两种方式的原理和效果都是一 ...

  6. 菜鸡的Java笔记 - java 访问控制权限

    java中四种访问控制权限的使用                内容            在java里面一共定义有四个权限,按照由小到大的顺序:private<defaule<prote ...

  7. 一文理解Java-class字节码文件

    前言 java语言在其刚诞生之际喊出的口号--"Write Once,Run Anywhere",正是基于字节码(byte code)而存在的,java能够做到平台无关性,得力于这 ...

  8. 面试官又整新活,居然问我for循环用i++和++i哪个效率高?

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 前几天,一个小伙伴告诉我,他在面试的时候被面试官问了这么一个问题: 在for循环中,到底应该用 i++ 还是 ++i ? 听到这,我感觉这面试官 ...

  9. mybatis判断集合长度

    使用mybatis框架在写sql的时候碰到一个异常: 1064 - You have an error in your SQL syntax; check the manual that corres ...

  10. python网络自动化运维之环境搭建(EVE-NG+pycharm)

    参考了很多资料,发现现在很多环境用的都是GNS3加linux下的python,几乎没有是用EVE-NG加上pycharm的教程,EVE的功能如此强大,存在的教程却较少,这里我出一篇教程供使用EVE作为 ...