Oracle 表结构管理
表其实是数据的‘容器’。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 表结构管理的更多相关文章
- oracle表结构和表内容差异比对
oracle表结构和表内容差异比对 oracle中有三种集合操作,他们会把左边和右边的select 结果集进行集合操作. union 并集 intersect 交集 minus 差集 假设有如下两张表 ...
- oracle表结构和表内容差异比对【原】
oracle表结构和表内容差异比对 oracle中有三种集合操作,他们会把左边和右边的select 结果集进行集合操作. union 并集 intersect 交集 minus 差集 假设有如下两张表 ...
- Oracle 表结构、索引以及分区信息查询
Oracle 表结构.索引以及分区信息查询 /* 获取表:*/ select table_name from user_tables; --当前用户的表 select table_name from ...
- Oracle表空间管理
oracle表空间相关常用命令小结: 1.ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE; //修改表空间数据文件类型 2.ALT ...
- oracle表结构
表管理 新建表 语法 create table 表名 ( 列名1 类型(长度), 列名2 类型(长度), 列名3 类型(长度) ); create table:关键字,建表 后跟新建表的表名,表名长度 ...
- ORACLE表空间管理维护
1:表空间概念 在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成. 如下图所示, ...
- Oracle表结构转换SqlSERVER表结构 脚本
在审计工作中,有时需要将Oracle的表结构修改后再SqlSERVER中创建表结构,然后将数据导入到SqlSERVER中,在修改表结构的过程中方法狠多.手工修改,最蠢的方法,或者用工具UE批量修改,还 ...
- oracle 表空管理方式(LMT)、ASSM段管理方式、一级位图块、二级位图块、三级位图块。
今天是2013-12-16,今天和明天是我学习oracle生涯中一个特殊的日子.今天晚上进行了一下表空间管理方式的学习,在此记录一下笔记. 对于oracle数据库最小i/0单位是数据块,最想分配空间单 ...
- 五、oracle 表的管理
一.表名和列名的命名规则1).必须以字母开头2).长度不能超过30个字符3).不能使用oracle的保留字4).只能使用如下字符 a-z,a-z,0-9,$,#等 二.数据类型1).字符类char 长 ...
随机推荐
- mybatis之结果集的映射方式
查询的几种情况 // 1)查询单行数据返回单个对象 public Employee getEmployeeById(Integer id ); // 2) 查询多行数据返回对象的集合 public L ...
- 输入指令npx webpack-dev-server报错:Error: Cannot find module ‘webpack-cli/bin/config-yargs‘的解决方法
输入指令npx webpack-dev-server报错:Error: Cannot find module 'webpack-cli/bin/config-yargs'的解决方法 输入指令:npx ...
- Go语言核心36讲(Go语言实战与应用一)--学习笔记
23 | 测试的基本规则和流程 (上) 在接下来的日子里,我将带你去学习在 Go 语言编程进阶的道路上,必须掌握的附加知识,比如:Go 程序测试.程序监测,以及 Go 语言标准库中各种常用代码包的正确 ...
- Oracle中对数字加汉字的排序
需求:有一列NAME, varchar2类型,内容如下 以上就是已经按order by name进行排序的,但不是我们想要的结果 现在需要只按数字进行排序 第一步:抽取数字由于数字有是一位的有是两位的 ...
- Flume面试题整理
1.Flume使用场景(☆☆☆☆☆) 线上数据一般主要是落地(存储到磁盘)或者通过socket传输给另外一个系统,这种情况下,你很难推动线上应用或服务去修改接口,实现直接向kafka里写数据,这时候你 ...
- 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」小白专区之领略一下RocketMQ基础之最!
应一些小伙伴们的私信,希望可以介绍一下RocketMQ的基础,那么我们现在就从0开始,进入RocketMQ的基础学习及概念介绍,为学习和使用RocketMQ打好基础! RocketMQ的定位 Rock ...
- Json数据使用及学习方法
以前对json的了解并不是很清楚,因为使用很少,所以也没有特意的研究.只知道json是轻量级的数据交换格式,可以被多种语言方便的处理,也是大型门户站接口使用的主要数据格式. 而最近做了个项目,涉及到j ...
- springbootjpa的dao层也会出现找不到javabean的操作
使用jpa的过程中,有一次使用dao写了一个 SysCompany findByName(String name);但实体类中没有name这个属性就会报错.bean注入异常
- Python3的运算符
比较运算符: == != < > <= >= 逻辑运算符 或与非 or and not x or y : x为true,则不计算y的值,直接返回ture x为false,则 ...
- 洛谷 P3644 [APIO2015]八邻旁之桥(对顶堆维护中位数)
题面传送门 题意: 一条河将大地分为 \(A,B\) 两个部分.两部分均可视为一根数轴. 有 \(n\) 名工人,第 \(i\) 名的家在 \(x_i\) 区域的 \(a_i\) 位置,公司在 \(y ...