表的有关操作

一、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发生变化,索引无效,需要重建索引。

   

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值