首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Oracle基础知识-治理表

2012-08-03 
Oracle基础知识--管理表以scott用户下的emp、detp等几个表作为示例,在sqlplus下演示。?1. 查看表结构:SQL d

Oracle基础知识--管理表

以scott用户下的emp、detp等几个表作为示例,在sqlplus下演示。

?

1. 查看表结构:

SQL> desc emp;

?

2. 在现有表基础上建立新表:

SQL> create table t1 as select * from emp;表已创建。

?? 当然,此处select * from emp可以灵活更改。

?? 如果想更改列名,有两种办法:

??1).

SQL> create table t1 as select ename a, empno b, sal c from emp;表已创建。SQL> desc t1; 名称                                                  是否为空? 类型 ----------------------------------------------------- -------- ------------ A                                                              VARCHAR2(10) B                                                              NUMBER(4) C                                                              NUMBER(7,2)

? 2).

SQL> create table t1(a, b, c) as select ename,empno,sal from emp;表已创建。SQL> desc t1; 名称                                                  是否为空? 类型 ----------------------------------------------------- -------- ------------- A                                                              VARCHAR2(10) B                                                              NUMBER(4) C                                                              NUMBER(7,2)

?

3. 修改表结构:

?? 1). 修改列长度,将上述t1表A列长度设为20:

SQL> desc t1; 名称                                                  是否为空? 类型 ----------------------------------------------------- -------- ------------- A                                                              VARCHAR2(10) B                                                              NUMBER(4) C                                                              NUMBER(7,2)SQL> alter table t1 modify(a varchar2(20));表已更改。SQL> desc t1; 名称                                                  是否为空? 类型 ----------------------------------------------------- -------- ------------- A                                                              VARCHAR2(20) B                                                              NUMBER(4) C                                                              NUMBER(7,2)

??? 如果要缩短列的长度,那么要保证该列的值没有超过要设置的列长。例如:

???

SQL> alter table t1 modify(a varchar2(10));表已更改。SQL> alter table t1 modify(a varchar2(2));alter table t1 modify(a varchar2(2))                      *第 1 行出现错误:ORA-01441: 无法减小列长度, 因为一些值过大

??

??? 同理,如果要修改列的类型,那么此列的值都应该为空。否则如下:

SQL> alter table t1 modify(a number(10,2));alter table t1 modify(a number(10,2))                      *第 1 行出现错误:ORA-01439: 要更改数据类型, 则要修改的列必须为空

??

?? 2). 修改表名:

SQL> rename t1 to t2;表已重命名。SQL> desc t1;ERROR:ORA-04043: 对象 t1 不存在SQL> desc t2; 名称                                      是否为空? 类型 ----------------------------------------- -------- ------------ A                                                  VARCHAR2(10) B                                                  NUMBER(4) C                                                  NUMBER(7,2)

??

?? 3.) 修改列名称:

SQL> desc t2; 名称                                      是否为空? 类型 ----------------------------------------- -------- ------------- A                                                  VARCHAR2(10) B                                                  NUMBER(4) C                                                  NUMBER(7,2)SQL> alter table t2 rename column a to d;表已更改。SQL> desc t2; 名称                                      是否为空? 类型 ----------------------------------------- -------- ------------- D                                                  VARCHAR2(10) B                                                  NUMBER(4) C                                                  NUMBER(7,2)

?

???4). 表注释:

SQL> select comments from user_tab_comments where table_name='T2';COMMENTS-------------------------------SQL> comment on table t2 is '测试表';注释已创建。SQL> select comments from user_tab_comments where table_name='T2';COMMENTS-------------------------------测试表

??

?? 5).列注释

SQL> SELECT COMMENTS FROM USER_COL_COMMENTS WHERE TABLE_NAME='T2';COMMENTS------------------------------SQL> COMMENT ON COLUMN T2.D IS '测试列注释';注释已创建。SQL> SELECT COMMENTS FROM USER_COL_COMMENTS WHERE TABLE_NAME='T2';COMMENTS------------------------------测试列注释

?

4. 删除表

SQL> drop table t2;表已删除。

?? 其实这里并没有将表真的删除,知识把它放到回收站里了。可以查看一下:

SQL> show recyclebin;ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME---------------- ------------------------------ ------------ -------------------T2               BIN$l0t3+wZLRb+jDCDBmZ1dhA==$0 TABLE        2011-10-31:20:41:43

?? 可以看到,original name即原始名称是t2,回收站里的名称是那一长串字符。

? ?也可以查看一下用户现有的表:

SQL> select * from tab;TNAME                          TABTYPE  CLUSTERID------------------------------ ------- ----------BIN$l0t3+wZLRb+jDCDBmZ1dhA==$0 TABLEBONUS                          TABLED                              TABLEDEPT                           TABLEE                              TABLEEMP                            TABLEPLAN_TABLE                     TABLESALGRADE                       TABLET3                             TABLETEST                           TABLE

?

5. 将回收站的表清空

SQL> show recyclebin;ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME---------------- ------------------------------ ------------ -------------------T2               BIN$l0t3+wZLRb+jDCDBmZ1dhA==$0 TABLE        2011-10-31:20:41:43SQL> purge table t2;表已清除。SQL> show recyclebin;

??

6. 将回收站的表还原

SQL> create table t2 as select * from emp;表已创建。SQL> drop table t2;表已删除。SQL> flashback table t2 to before drop;闪回完成。

?

7. 清空当前用户下的recyclebin

??

SQL> purge recyclebin;回收站已清空。

?

8. 删除表的时候,彻底删除,不放入回收站:

SQL> drop table t2 purge;表已删除。SQL> show recyclebin;

?这样的话,回收站里就空了,如果想要恢复表的话只能取备份来恢复了...比较麻烦了~

热点排行