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;
?这样的话,回收站里就空了,如果想要恢复表的话只能取备份来恢复了...比较麻烦了~