0

0

oracle11g的表

php中文网

php中文网

发布时间:2016-06-07 15:32:21

|

1911人浏览过

|

来源于php中文网

原创

create cluster scott.cluster1(code_key number); create table scott.student (sno1 number, sname varchar2(10)) cluster scott.cluster1(sno1); create table scott.address (sno2 number, zz varchar2(10)) cluster scott.cluster1(sno2); create index

create cluster  scott.cluster1(code_key number);

create table scott.student (sno1 number, sname  varchar2(10)) cluster scott.cluster1(sno1);

create table scott.address (sno2 number, zz varchar2(10)) cluster scott.cluster1(sno2);

create index index1 on cluster scott.cluster1;   --为簇创建索引

//1.首先创建簇表

SQL> create cluster cluster1(share_col number(10));

Cluster created


SQL> create table tab1(sno number(10),sname varchar2(20)) cluster cluster1(sno);

Table created


SQL> create table tab2(sno number(10),saddr varchar2(20)) cluster cluster1(sno);

Table created


SQL> create index cluster_index on cluster cluster1;

Index created


SQL> select uc.CLUSTER_NAME,uc.TABLESPACE_NAME,uc.CLUSTER_TYPE from user_clusters uc where uc.CLUSTER_NAME='CLUSTER1';

CLUSTER_NAME       TABLESPACE_NAME CLUSTER_TYPE

------------------------------ ------------------------------ ------------

CLUSTER1               USERS                     INDEX


SQL> select ut.TABLE_NAME,ut.TABLESPACE_NAME,ut.CLUSTER_NAME from user_tables ut where ut.TABLE_NAME='TEST1';

TABLE_NAME           TABLESPACE_NAME CLUSTER_NAME

------------------------------ ------------------------------ ------------------------------


SQL> select ut.TABLE_NAME,ut.TABLESPACE_NAME,ut.CLUSTER_NAME from user_tables ut where ut.CLUSTER_NAME='CLUSTER1';

TABLE_NAME           TABLESPACE_NAME CLUSTER_NAME

------------------------------ ------------------------------ ------------------------------

TAB2                       USERS                     CLUSTER1

TAB1                       USERS                     CLUSTER1


SQL> 

先删除表,再删除簇表


四、临时表:


   存放临时数据,可以使用临时表;临时表被每个session

单独使用,即:不同session看到的临时表中的数据可能不一

样。

   如果在退出session时删除临时表中的数据,可以使用on

commit preserve rows;如果在用户commit或rollback时删

除临时表中的数据,可以使用on commit delete rows;

   从v$sort_usage中查看正在使用临时表空间的session信

息和SQL语句的ID号,从v$sort_segment中查看临时表空间中

的段的使用情况。

   临时表在临时表空间中保存。

create global temporary table temp_tab1() on commmit preserve rows/delete rows;


五、分区表:


oracle11g的表

q允许用户将一个表分成多个分区

q用户可以执行查询,只访问表中的特定分区

q将不同的分区存储在不同的磁盘,提高访问性能和安全性

q可以独立地备份和恢复每个分区

     分区方式有一下几种:

      1. 范围分区:以表中的一个列或一组列的值的范围分区

SQL> create table test_partition(id number(20),account number(20))

  2  partition by range(id)(

  3  partition part1 values less than(1000),

  4  partition part2 values less than(2000),

  5  partition part3 values less than(3000));

Table created


SQL> select utp.table_name,utp.partition_name,utp.high_value from user_tab_partitions utp where utp.table_name='TEST_PARTITION';

TABLE_NAME           PARTITION_NAME    HIGH_VALUE

------------------------------ ------------------------------ --------------------------------------------------------------------------------

TEST_PARTITION      PART1                     1000//

TEST_PARTITION      PART2                     2000>=1000 和

TEST_PARTITION      PART3                     3000


SQL> insert into test_partition part1 values(1,100);

1 row inserted


SQL> insert into test_partition values(1000,200);

1 row inserted


SQL> insert into test_partition part1 values(2000,300);//标注为会被忽略

1 row inserted


SQL> insert into test_partition values(5000,400);

insert into test_partition values(5000,400)

ORA-14400: 插入的分区关键字未映射到任何分区


SQL> select * from test_partition partition(part1);

                   ID               ACCOUNT

--------------------- ---------------------

                    1                   100


SQL>

SQL> select * from test_partition partition(part2);

                   ID               ACCOUNT

--------------------- ---------------------

                 1000                   200


SQL> alter table test_partition add partition part4 values less than(maxvalue);//无上限

Table altered


SQL> insert into test_partition values(6000,600);

1 row inserted


SQL> select * from test_partition partition(part4);

                   ID               ACCOUNT

--------------------- ---------------------

                 6000                   600


SQL> 


     2.散列分区

允许用户对不具有逻辑范围的数据进行分区

通过在分区键上执行HASH函数决定存储的分区

将数据平均地分布到不同的分区

SQL> create table test_partition_hash(id number(20),name varchar(20))

  2  partition by hash(id)(//散列分区是通过hash算法得到分区来进行的

  3  partition part1,partition part2,partition part3);

Table created


SQL> select utp.table_name,utp.partition_name,utp.high_value  from user_tab_partitions utp where utp.table_name='TEST_PARTITION_HASH';

TABLE_NAME           PARTITION_NAME    HIGH_VALUE

------------------------------ ------------------------------ --------------------------------------------------------------------------------

TEST_PARTITION_HASH PART1                    //所以不存在high_value

TEST_PARTITION_HASH PART2                    

TEST_PARTITION_HASH PART3                    


SQL> insert into test_partition_hash values(1,'张三');

1 row inserted


SQL> insert into test_partition_hash values(2,'李四');

1 row inserted


SQL> insert into test_partition_hash values(3,'王五');

1 row inserted

SQL>

SQL> select * from test_partition_hash partition(part1);

                   ID NAME

--------------------- --------------------


SQL> select * from test_partition_hash partition(part2);

                   ID NAME

--------------------- --------------------

                    1 张三

                    3 王五


SQL> select * from test_partition_hash partition(part3);

                   ID NAME

--------------------- --------------------

                    2 李四


SQL> 



     3. 列表分区

 允许用户将不相关的数据组织在一起

注意:列表分区是针对于可以列举的类型进行分区的

SQL> create table test_partition_list(id number(20),name varchar2(20),address varchar2(20))

  2  partition by list(address)(

  3  partition 上北 values('九江'),

  4  partition 下南 values('赣州','鹰潭'),

  5  partition 左西 values('抚州','新余'),

  6  partition 右东 values('景德镇'));

Table created


SQL> insert into test_partition_list values(1,'吴xx','九江');

1 row inserted


SQL> insert into test_partition_list values(2,'陈xx','赣州');

1 row inserted


SQL> insert into test_partition_list values(3,'邹xx','抚州');

1 row inserted


SQL> insert into test_partition_list values(4,'刘xx','景德镇');

1 row inserted


SQL> select * from test_partition_list partition(上北);

                   ID NAME            ADDRESS

--------------------- -------------------- --------------------

                    1 吴xx              九江


SQL> select * from test_partition_list partition(下南);

                   ID NAME            ADDRESS

--------------------- -------------------- --------------------

                    2 陈xx              赣州


SQL> 

     

     4. 复合分区

 范围分区与散列分区或列表分区的组合//只有这两种组合而且顺序不能颠倒

 

SQL> create table test_partition_compass(

  2  id number(20),name varchar2(20))

  3  partition by range(id)//主分区

  4  subpartition by hash(name)//子分区

  5  subpartitions 4(//每个主分区包括4个子分区

  6  partition part1 values less than(100),//第一个分区

  7  partition part2 values less than(200),

  8  partition part3 values less than(maxvalue));

Table created

通过EM查看表的分区信息如下:

 A browser with Javascript enabled is required for this page to operate properly.

Partitions

oracle11g的表
 
 

Partitioning Description

 
 
Partitioning Method   Range-Hash
Partitioning Columns   ID
Number of Partitions   3
Subpartitioning Columns   NAME
Number of Subpartitions   12
 
 

Partition Definitions

 
 
oracle11g的表   Previous   1-3 of 3   Next   oracle11g的表
Partition Name High Value - ID (NUMBER) Subpartition Default Tablespace Subpartitions
PART1 100 USERS 4
PART2 200 USERS 4
PART3 MAXVALUE USERS 4
 
 

Subpartition Definitions

 
 
  Previous   1-12 of 12   Next    
Partition Name Subpartition Name Tablespace
PART1 SYS_SUBP21 USERS
  SYS_SUBP22 USERS
  SYS_SUBP23 USERS
  SYS_SUBP24 USERS
PART2 SYS_SUBP25 USERS
  SYS_SUBP26 USERS
....... ........ ........


    

5.11g新增的表分区的类型 引用分区

    引用分区:基于由外键引用的父表的分区的方

法,它依赖已有的父表子表的关系,子表通过外键

关联到父表,进而继承了父表的分区方式而不需自

己创建,子表还继承了父表的维护操作。

   1,主表是范围分区,子表是引用分区

   2,主表是列表分区,子表是引用分区

   3,主表是散列分区,子表是引用分区

//创建范围分区


SQL>

SQL> create table test_partition_student(

  2  id number(10),name varchar2(20),grade varchar2(20),constraints pk_student primary key(id))

  3  partition by range(id) (

  4  partition part1 values less than(100),

  5  partition part2 values less than(200),

  6  partition part3 values less than(maxvalue));

Table created


SQL> create table test_partition_score(

  2     id number(10) primary key ,sid number(10),goal number(10),constraints fk_student_score foreign key(sid)

  3     references  test_partition_student(id))

  4    partition by reference(fk_student_score);

create table test_partition_score(

   id number(10) primary key ,sid number(10),goal number(10),constraints fk_student_score foreign key(sid)

   references  test_partition_student(id))

AiBiao
AiBiao

一键生成图表的AI工具

下载

  partition by reference(fk_student_score)

ORA-14652: 不支持引用分区外键,关联的外键必须是非空


SQL>

SQL> create table test_partition_score(

  2     id number(10) primary key ,sid number(10) not null,goal number(10),constraints fk_student_score foreign key(sid)

  3     references  test_partition_student(id))

  4    partition by reference(fk_student_score);

Table created

SQL>

SQL> select upt.table_name,upt.partition_name,upt.high_value from user_tab_partitions  upt where upt.table_name in(upper('test_partition_score'),upper('test_partition_student'));

TABLE_NAME           PARTITION_NAME    HIGH_VALUE

------------------------------ ------------------------------ --------------------------------------------------------------------------------

TEST_PARTITION_STUDENT PART1                     100

TEST_PARTITION_STUDENT PART2                     200

TEST_PARTITION_STUDENT PART3                     MAXVALUE

TEST_PARTITION_SCORE PART1                    

TEST_PARTITION_SCORE PART2                    

TEST_PARTITION_SCORE PART3                    

6 rows selected

分区名称相同

SQL> insert into TEST_PARTITION_STUDENT values(1,'张三','二年级');

1 row inserted


SQL> insert into TEST_PARTITION_STUDENT values(111,'李四','三年级');

1 row inserted


SQL> insert into TEST_PARTITION_SCORE values(1,1,100);

1 row inserted


SQL> insert into TEST_PARTITION_SCORE values(2,111,99);

1 row inserted


SQL> select * from TEST_PARTITION_STUDENT partition(part1);

         ID NAME            GRADE

----------- -------------------- --------------------

          1 张三               二年级


SQL>  select * from TEST_PARTITION_SCORE partition(part1);

         ID         SID        GOAL

----------- ----------- -----------

          1           1         100


SQL> 


6.11g新增的表分区的类型 间隔分区


      间隔分区:可以完全自动地根据间隔阈值创建范

      围分区,它是范围分区的扩展 。

          在数据仓库中有广泛的应用。


SQL> select * from user_part_tables;//存放的是分区表的情况

SQL> select * from user_tab_partitions;/存放的是表分区的情况


SQL> create table test_partition_interval(

  2         id number(10),name varchar2(20),num number(20),_date date)

  3         partition by range(_date)

  4         interval(NUMTOYMINTERVAL(1,'MONTH'))(

  5                   partition part1 values less than(to_date(20140101,'yyyymmdd')));

create table test_partition_interval(

       id number(10),name varchar2(20),num number(20),_date date)

       partition by range(_date)

       interval(NUMTOYMINTERVAL(1,'MONTH'))(

                 partition part1 values less than(to_date(20140101,'yyyymmdd')))

ORA-00911: 无效字符//不能使用_开头的属性名称


SQL>

SQL> create table test_partition_interval(

  2         id number(10),name varchar2(20),num number(20),s_date date)

  3         partition by range(s_date)

  4         interval(NUMTOYMINTERVAL(1,'MONTH'))(//按照一个月来间隔增长的

  5                   partition part1 values less than(to_date(20140101,'yyyymmdd')));//初始的月份

Table created


SQL> select  sysdate from dual;

SYSDATE

-----------

13-1月-15 1:


SQL> INSERT INTO test_partition_interval VALUES(1,'上衣',20,'01-1月-2014');

1 row inserted

SQL>

SQL> INSERT INTO test_partition_interval VALUES(1,'上衣',20,'01-2月-2014');

1 row inserted


SQL> select utp.table_name,utp.partition_name,utp.high_value from user_tab_partitions utp where utp.table_name='TEST_PARTITION_INTERVAL';

TABLE_NAME           PARTITION_NAME    HIGH_VALUE

------------------------------ ------------------------------ --------------------------------------------------------------------------------

TEST_PARTITION_INTERVAL PART1                     TO_DATE(' 2014-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

TEST_PARTITION_INTERVAL SYS_P41                 TO_DATE(' 2014-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

TEST_PARTITION_INTERVAL SYS_P42                 TO_DATE(' 2014-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA


SQL> INSERT INTO test_partition_interval VALUES(1,'上衣',20,'01-10月-2014');

1 row inserted


SQL> select utp.table_name,utp.partition_name,utp.high_value from user_tab_partitions utp where utp.table_name='TEST_PARTITION_INTERVAL';

TABLE_NAME           PARTITION_NAME    HIGH_VALUE

------------------------------ ------------------------------ --------------------------------------------------------------------------------

TEST_PARTITION_INTERVAL PART1                     TO_DATE(' 2014-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

TEST_PARTITION_INTERVAL SYS_P41                 TO_DATE(' 2014-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

TEST_PARTITION_INTERVAL SYS_P42                 TO_DATE(' 2014-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

TEST_PARTITION_INTERVAL SYS_P43                 TO_DATE(' 2014-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA


SQL> 


7. 11g新增的表分区的类型--基于虚拟列的分区

         基于虚拟列的分区:把分区建立在某个虚拟列

上,即建立在函数或表达式的计算结果上,来完成

某种任务。

SQL>

SQL> create table test_partition_virtual(

  2  id number(10),name varchar2(20),num number(20),price number(8,2),total_price as price*num virtual)

  3  partition by range(total_price)(

  4  partition part1 values less than(1000),

  5  partition part2 values less than(2000),

  6  partition part3 values less than(maxvalue));

ORA-02000: 缺失 ( 关键字


SQL>

SQL>

SQL> create table test_partition_virtual(

  2  id number(10),name varchar2(20),num number(20),price number(8,2),total_price as (price*num) virtual)

  3  partition by range(total_price)(

  4  partition part1 values less than(1000),

  5  partition part2 values less than(2000),

  6  partition part3 values less than(maxvalue));

Table created


SQL> insert into test_partition_virtual(id,name,num,price) values(1,'上衣',10,100);

1 row inserted


SQL> insert into test_partition_virtual(id,name,num,price) values(1,'上衣',20,100);

1 row inserted


SQL> select * from test_partition_virtual partition(part1);

         ID NAME                              NUM      PRICE TOTAL_PRICE

----------- -------------------- --------------------- ---------- -----------


SQL> select * from test_partition_virtual partition(part2);

         ID NAME                              NUM      PRICE TOTAL_PRICE

----------- -------------------- --------------------- ---------- -----------

          1 上衣                                  10     100.00        1000


SQL> 



8. 11g新增的表分区的类型系统分区


   系统分区:不指定分区列,由ORACLE来完成分

区的控制和管理,它没有了范围分区或列表分区的

界限。 

分区维护操作

     q分区维护操作修改已分区表的分区。

q分区维护的类型:

q计划事件 - 定期删除最旧的分区

q非计划事件 - 解决应用程序或系统问题

q分区维护操作有:

q添加分区

q删除分区

q截断分区

q合并分区

q拆分分区


SQL> alter table test_partition add partition values less than(6000);

alter table test_partition add partition values less than(6000)

ORA-14074: 分区界限必须调整为高于最后一个分区界限

分区因为是添加在最后以后分区上的

//删除分区

SQL> alter table test_partition drop partition part4;

Table altered

//增加分区

SQL> alter table test_partition add partition part4 values less than(7000);

Table altered

//拆分分区


SQL> alter table test_partition merge partitions part1,part2 into partition part2;

Table altered

//合并分区

SQL> alter table test_partition split partition part2 at(1000) into (partition part1 ,partition part2);

SQL>  alter table test_partition split partition part2 at(1000) into (partition part1 ,partition part2);

Table altered

//截断分区

SQL> alter table test_partition truncate partition part3;

Table truncated


SQL> 
















相关专题

更多
苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

115

2025.12.24

拼豆图纸在线生成器
拼豆图纸在线生成器

拼豆图纸生成器有PixelBeads在线版、BeadGen和“豆图快转”;推荐通过pixelbeads.online或搜索“beadgen free online”直达官网,避开需注册的诱导页面。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

82

2025.12.24

俄罗斯搜索引擎yandex官方入口地址(最新版)
俄罗斯搜索引擎yandex官方入口地址(最新版)

Yandex官方入口网址是https://yandex.com。用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

546

2025.12.24

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

150

2025.12.24

php框架基础知识汇总
php框架基础知识汇总

php框架是构建web应用程序的架构,提供工具和功能,以简化开发过程。选择合适的框架取决于项目需求和技能水平。实战案例展示了使用laravel构建博客的步骤,包括安装、创建模型、定义路由、编写控制器和呈现视图。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

20

2025.12.24

Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

47

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

7

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

12

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

371

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4万人学习

Rust 教程
Rust 教程

共28课时 | 3.8万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号