设为首页 收藏本站
查看: 800|回复: 0

[经验分享] Oracle基础知识--管理表

[复制链接]

尚未签到

发表于 2016-7-19 06:56:54 | 显示全部楼层 |阅读模式
  以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 TABLE
BONUS                          TABLE
D                              TABLE
DEPT                           TABLE
E                              TABLE
EMP                            TABLE
PLAN_TABLE                     TABLE
SALGRADE                       TABLE
T3                             TABLE
TEST                           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:43
SQL> 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;
  这样的话,回收站里就空了,如果想要恢复表的话只能取备份来恢复了...比较麻烦了~

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-246000-1-1.html 上篇帖子: Oracle系统参数优化 下篇帖子: oracle sql 查询子节点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表