表的有关操作

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

   

    

Hive与表操作有关的语句

1.创建表的语句:Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_commen...
  • linuxchyu
  • linuxchyu
  • 2013年11月27日 14:03
  • 561

设计一个时间类Time

/*设计一个时间类(Time),有年、月、日3个属性,有 成员函数void setTime(int y ,int m,int d)能够完成设置当前年月日 成员函数void setTime(int m,...
  • chenzongduozhu
  • chenzongduozhu
  • 2016年12月03日 16:36
  • 1130

操作SQL Server Mobile数据库的常用C#代码

操作SQL Server Mobile数据库的常用C#代码 整理几段操作 SQL Server Mobile 数据库的常用 C# 代码,供刚刚接触 SQL Server Mobile 开发的朋友参考。...
  • enginetanmary
  • enginetanmary
  • 2007年07月27日 10:19
  • 489

Java OOP day04

笔记: 1.方法的重写(Override):重新写、覆盖 1)发生在父子类中,方法名称相同,参数列表相同,方法体不同 2)重写方法被调用时,看对象的类型 2.重写与重载的区别:——–常...
  • AAALONE
  • AAALONE
  • 2017年02月28日 23:06
  • 134

使用SQL Server 2008进行优化性能

现今的公司需要易访问且可用性好的商业数据,以便他们可以在全球市场中获得一席之地。与易访问数据的这个需求相呼应,关系数据库和分析数据库在规模方面继续发展,内嵌数据库和许多产品一起出现,并且许多公司将服务...
  • lanwilliam
  • lanwilliam
  • 2010年06月15日 20:59
  • 372

6-5 链式表操作集(20 point(s))

6-5 链式表操作集(20 point(s)) 本题要求实现链式表的操作集。 函数接口定义: Position Find( List L, ElementType X ); List...
  • codeswarrior
  • codeswarrior
  • 2017年11月02日 08:34
  • 228

test2

单选题   1. 操作系统具有进程管理、存储管理、文件管理和设备管理的功能,在以下有关的描述中,哪一个是不正确的    (该题为必答题)    标记为待复查 (1) 分数    进程...
  • mmx6767
  • mmx6767
  • 2013年09月03日 22:35
  • 713

与窗口操作有关的API

判断与设置窗口置顶
  • hironpan
  • hironpan
  • 2014年10月09日 21:43
  • 326

Oracle对表的基本操作(一) - 创建、修改、删除表

在这里整理一下Oracle中对表的基本操作。 1. 创建表 1.1 直接创建 create table 表名 ( field1 type[(size)] [index1], field2 typ...
  • jolingogo
  • jolingogo
  • 2013年10月30日 09:45
  • 2654

SQL单表操作语句

1.创建数据库及表:CREATE DATABASE text;  use text;(在text下创建表)             CREATE TABLE celebs; 2.表创建列:列...
  • grs294845170
  • grs294845170
  • 2017年06月01日 14:45
  • 281
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:表的有关操作
举报原因:
原因补充:

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