表其实是数据的‘容器’。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. webpack 之开发环境优化 HMR

    webpack 之开发环境优化 HMR // webpack.config.js /** * HMR hot module replacement 热模块替换 / 模块热替换 * 作用:一个模块发生变 ...

  2. js 事件流和事件冒泡阻止

    js 事件流和事件冒泡阻止 事件流 当浏览器发展到第四代的时候(IE4与Netscape4)浏览器开发团队遇到一个有意思的的问题: 页面的哪一部分会拥有某个特定的事件? 比如在纸上画上一组同心圆,如果 ...

  3. LeetCode 113. 路径总和 II C++

    提交结果:内存超100%,用时超69% /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo ...

  4. java.lang.NoSuchFieldError: REFLECTION

    2020-09-14 09:13:21.415 INFO org.apache.cxf.service.factory.ReflectionServiceFactoryBean Line:457 - ...

  5. Spring Boot中如何自定义starter?

    Spring Boot starter 我们知道Spring Boot大大简化了项目初始搭建以及开发过程,而这些都是通过Spring Boot提供的starter来完成的.品达通用权限系统就是基于Sp ...

  6. [loj3340]命运

    容斥,强制若干条链不重要,即有$2^{n-1-s}$种(其中$s$为这些链的并所覆盖的边数),暴力将选中的链打标记,时间复杂度$o(m^{2}2^{m}+n\log_{2}n)$(预处理出这$2m$个 ...

  7. [cf516E]Drazil and His Happy Friends

    令$d=\gcd(n,m)$,存在$x$和$y$使得$xn+i=ym+j$的充要条件是$i\equiv j(mod \ d)$,因此将$xd+i$(其中$0\le i<d$)作为一组,共有$d$ ...

  8. 微服务改造之Openfeign的强化插件

    在接触 Spring Cloud 这套框架之前,笔者使用的一直是Dubbo.在转型到Spring Cloud 后,发现了一个很郁闷的问题.Spring Cloud 中的 Openfeign,相比于 D ...

  9. Java安全之Axis漏洞分析

    Java安全之Axis漏洞分析 0x00 前言 看到个别代码常出现里面有一些Axis组件,没去仔细研究过该漏洞.研究记录一下. 0x01 漏洞复现 漏洞版本:axis=<1.4 Axis1.4 ...

  10. nginx得请求转发代码-将请求转发到网关

    首先:本地主机host更改成 192.168.111.1 gulimail.com 这样一访问网址就能映射到本地. 然后修改nginx得conf worker_processes 1; events ...