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 长 ...
随机推荐
- centos yum更换阿里镜像
#1.如果没有wget命令,则需要执行下面命令进行安装.为保险期间,先执行下面命令. yum install wget #2.备份原镜像源,以免出错后可以恢复. mv /etc/yum.repos.d ...
- Linux usb 2. 协议分析
文章目录 0. 背景 1. USB 协议传输格式 1.1 Packet 1.1.1 Token Packet 1.1.2 Data Packet 1.1.3 Handshake Packet 1.1. ...
- mysql 禁止外键检查
SET FOREIGN_KEY_CHECKS=0; SET FOREIGN_KEY_CHECKS=1; from: https://stackoverflow.com/a/15501754/80250 ...
- mysql: 看不见的空符号 char(9) char(10) char(13)
在统计年度销售额时,总觉得哪里不对劲.于是找了找,对了对,试了trim,消除前后的空格,也没反应. 在崩溃的边缘,终于发现了错的原因. 原来我在录入的时候,粘贴多了其他空白符号,看不见,摸不着,啊~ ...
- JS和JQUERY常见函数封装方式
JS中常用的封装函数4种方法: 1. 函数封装法: function box(){ } 2. 封装成对象 : let Cookie = { get(){ }, set(){ } } 3. 封装成构造函 ...
- Java_map
1 package Test; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 public class MapTest { 7 p ...
- [cf1361E]James and the Chase
称一个点是"好点",当且仅当其到其余所有点恰存在一条简单路径 结论1:$x$为好点当且仅当以$x$为根的dfs树包含所有点且非树边均为返祖边 若不包含所有点,那么$x$到不被包含的 ...
- [atARC070F]HonestOrUnkind
考虑当$a\le b$时,构造两种方案,满足诚实的人不交,接下来要求对于任意询问,这两种方案的答案都有可能相同 考虑询问$(i,j)$,若$i$在两种方案中有一种不诚实,那么总可以让答案相同,又因为诚 ...
- [bzoj1593]旅馆
用线段树维护区间中最大的一段连续的1,以左端点为左端点最大的一段连续的1,以右端点为右端点最大的一段连续的1,然后就可以支持区间修改和查询了 1 #include<bits/stdc++.h&g ...
- [loj3341]时代的眼泪
题意即求在区间$[l,r]$中且权值在$[x,y]$中的逆序对个数 考虑分块,逆序对个数包含4部分: 1.左/右块外内部,预处理出$i$到其所在块的块首/尾,小于/小于等于$j$(需要对$j$离散)的 ...