表的有关操作

原创 2012年03月23日 01:04:16

一、oracle中的表分为:对象表和关系表

  关系表分为:堆组织表、临时表、索引组织表、分区表、集群表。

二、创建表之前估算表的大小

  1、使用OEM

  2、使用DBMS_SPACE

    例如:

      declare

      l_used_bytes number;

      l_allocate_bytes number;

      begin

      dbms_space.create_table_cost(

      tablespace_name =>'USERS',

      avg_row_size =>100000,

      row_count =>100000,

      pct_free =>20,

      used_bytes =>l_used_bytes,

      alloc_bytes =>l_allocate_bytes);

      dbms_output.put_line('使用空间为:'||l_used_bytes||','||'需要分配的空间为:'||l_allocate_bytes);

      end;

    3、释放段的空间

    如:alter table table_name deallocate unused;

三、创建表

    需要create table权限,为其他模式创建表,需要create any table权限。

    一般语法:create table table_name(column_name data_type [,column_name data_type.....])

                   tablespace tablespace_name

                  pctfree n

                  --使用本地管理的表空间,不需要指定存储参数

                 --在创建表时可以指定约束,可以在表级,也可以在列级,在多个列上创建约束则必须在表级;在创建约束时可以指定约束名,也可以不指定,由系统自动生成。

四、更改表

  1、添加列

    alter table table_name add (column_name data_type [,column_name data_type .....])

    如果只增加一列也可以这样写:alter table table_name column_nmae data_type;

    --可以在增加列的同时创建表级或者列级约束,就如同创建表时。

  2、删除列

    alter table table_name drop column column_name;  --该方法只能删除一列

    alter table table_name drop (column_name1 [,column_nmae2 .....]);  --该方法可以删除多列或者一列。

    如果该列被其他列引用,则在删除时需加cascade constraints选项。

    如果列含有较大数据,可以在先把列置为无效,然后在数据库使用低峰时候再删除,如:

    alter table table_name set unused column column_name;  --该方法只能针对一列。

    alter table table_name set unused (column_name1 [,column_nmae2 ....]);  --该方法可以针对多列或者一列。

    alter table table_name drop unused columns [checkpoint n]

    如果在删除时由于故障中断,可以在数据库恢复正常时继续删除:

    alter table table_name drop columns continue [checkpoint n];

  3、修改列

    修改数据类型:alter table table_name modify column_name new_data_type;

    增加非空约束:alter table table_name modify column_name not null;

    删除非空约束:alter table table_name modify column_name null;

  4、重命名列

    alter table table_name rename column column_name to column_new_name;

五、重命名表

  alter table table_name rename to new_table_name; 或者rename table_name to new_table_name;

  --表被重命名之后,有关表的索引、约束、权限将被过继到新表中,但依赖该表的子程序被置为无效。

六、删除

  1、删除表中数据

    delete from table_name [where 条件];  --delete时DML语句,oracle会写撤销数据,删除速度慢,但能通过rollback或者在commit之后使用flashback table恢复数据。

    truncate table table_name [{drop | reuse} storage]; --truncate时DDL语句,oracle不会写撤销数据,删除速度快,但不能恢复。

  2、删除表

  drop table table_name [purge] [cascade constraints]; 

  --如果不加purge,则表在删除之后被重命名进入回收站,可以使用flashback drop恢复

  --查询用户回收站中的数据:show purge;

  --清理回收站中的某个表:purge tabletable_name;

  --清理用户回收站中的所有数据:purge recyclebin;

  --闪回被删除的表:flashback table table_name to before drop;

七、使用CTAS创建表

  1、一般用法:create table table_name1 as select column_name1 [,column_name2 ...] from table_name2 [where 条件];  --新表和源表的列名和数据类型完全相同。

  2、新表使用和源表不同的列名:create table table_name1(column_name11 [,column_name12 ....]) --l列名之后不能指定数据类型,且列于select子句中的列一一对应。

                                                 as select column_name21 [,column_name22 ....] from table_name2

                                                  [where 条件]

                  

                                                  create table table_name1

                                                  as select column_name1 别名1 [,column_name2 别名2 ......] from table_name2   --使用别名作为新表的列名。

                                                  [where 条件]

  3、指定新表存储的表空间:create table table_name1 tablespace tablespace_name as select column_name1 [,column_name2 ...] from table_name2 [where 条件];

  4、使用CTAS创建表,符合条件的数据同时被写入新表中。如果数据量太大,可以使用parallel或者nologging加快创建的速度:

    crea te table table_name1

    parallel  n  --n为并行度的数值。

    nologging

    as

    select column_name1 [,column_name2 ...] from table_name2 [where 条件];

八、转移表到其他表空间

  alter table table_name move tablespace tablespace_name;

  --使用该方法可以整理表段中的碎片,但转移之后行数据的rowid发生变化,索引无效,需要重建索引。

   

    

相关文章推荐

pandas全部操作指令表

  • 2017年11月21日 18:21
  • 87KB
  • 下载

链表类及其基本操作

  • 2017年11月18日 09:13
  • 7KB
  • 下载

Python进行数据的Join关联操作及从分表取数据一例

这样的功能主要用在两表分别在不同的数据库上,在数据库层面不同步数据关联不了的情况。且目前,被关联的表公仅支持是key/value两列数据的情况。 1、数据准备 -- 主表 select * from ...

C语言链表排序操作

  • 2017年06月29日 13:41
  • 3KB
  • 下载

带头节点的单链表的基本操作

#include #include typedef struct node { int data; node* pNext; }Node; //链表的操作,以带有头节点单链表为例 Node* h...
  • acm_JL
  • acm_JL
  • 2016年03月21日 20:07
  • 522

FCP-642-CP6----各功能键操作表

  • 2016年08月10日 23:19
  • 51KB
  • 下载

C语言实现链表的逆置操作

#include #include #include typedef int ElemType; typedef struct Node{ ElemType num; struc...

数据结构线性表操作

  • 2015年05月22日 14:19
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:表的有关操作
举报原因:
原因补充:

(最多只允许输入30个字)