zoukankan      html  css  js  c++  java
  • oracle实验21:建立简单的表,并对表进行简单的DDL操作

    DDL和DML语句

    SQL语言包括四种主要程序设计语言类别的语句:

    • DDL数据定义语言(Data Definition Language)
    • DML数据操作语言(Data Manipulation Language)
    • DCL数据控制语言(Data Control Language)
    • TCL事务控制语言(Transaction Control Language)


    数据库模式定义语言DDL(Data Definition Language),是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。这些定义包括结构定义、操作方法定义等。


    数据操纵语言DML(Data Manipulation Language),使用户能够查询数据库以及操作已有数据库中的数据的计算机语言。DML包括:INSERT插入、UPDATE更新、DELETE删除。

    注意,select语句属于DQL(Data Query Language)。

    表的基本操作

    • 表有名称
    • 表由行和列组成。
    • 表是存放数据的最基本对象。
    • 堆表:我们将一般的表叫做head table(堆表),其含义为杂乱无章的存储数据,堆表是数据库的重要组织形式。他有别于索引组织表和cluster表。


    表的名称规则

    • 标准的ASCII码可以描述
    • 字母开头
    • 30个字母内
    • 不能是保留字
    • 可以包含大小写字母,数字,_,$,#
    • 不能和所属用户的其他对象重名。
    • 注:不要使用汉字做表和列的名称。

    数据字典

    SQL> conn scott/tiger
    已连接。
    SQL> col object_name for a20
    SQL> col object_type for a20
    SQL> select object_name,object_type from user_objects;

    OBJECT_NAME          OBJECT_TYPE                                                
    -------------------- --------------------                                       
    SALGRADE             TABLE                                                      
    BONUS                TABLE                                                      
    PK_EMP               INDEX                                                      
    EMP                  TABLE                                                      
    DEPT                 TABLE                                                      
    PK_DEPT              INDEX                                                      

    已选择6行。

    user_objects当前用户所拥有的所有对象。不包含自己建立的public对象。

     

    SQL> select table_name from user_tables;

    TABLE_NAME                                                                      
    ------------------------------                                                  
    DEPT                                                                            
    EMP                                                                             
    BONUS                                                                           
    SALGRADE                                                                        
    T1                                                                              
    T3                                                                              

    已选择6行。

    user_tables当前用户所拥有的表,有一切权利。


    SQL> select * from tab;

    TNAME                          TABTYPE  CLUSTERID                               
    ------------------------------ ------- ----------                               
    DEPT                           TABLE                                            
    EMP                            TABLE                                            
    BONUS                          TABLE                                            
    SALGRADE                       TABLE                                            

    tab当前用户所拥有的表和视图,显示较简洁。

    实验21:建立简单的表,并对表进行简单的DDL操作

    1.create table语句建立表

    • 指明表的名称
    • 指明列的名称
    • 列的数据类型
    • 列的宽度
    • 是否有默认值

    常见的数据类型

      • char(n)定长
      • varchar2(n)变长,最大到4000
      • number
      • date
      • long
      • lob
      • raw

     

    创建表

    SQL> create table t1(name char(8),salary number(5) default 0,content char(4 char), hiredate date);

    表已创建。

    描述表结构

    SQL> desc t1
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     NAME                                               CHAR(8)
     SALARY                                             NUMBER(5)
     CONTENT                                            CHAR(4 CHAR)
     HIREDATE                                           DATE

    验证表

    SQL> select table_name from user_tables;

    TABLE_NAME                                                                      
    ------------------------------                                                  
    DEPT                                                                            
    EMP                                                                             
    BONUS                                                                           
    SALGRADE                                                                        
    T1                                                                              

    SQL> col data_length for a20
    SQL> col data_type for a20
    SQL> col column_name for a20
    SQL> col table_name for a20

    SQL> select table_name,column_name,data_type,data_length
         from user_tab_columns where table_name='T1';

    TABLE_NAME           COLUMN_NAME          DATA_TYPE            DATA_LENGTH      
    -------------------- -------------------- -------------------- -----------      
    T1                   NAME                 CHAR                  ##########      
    T1                   SALARY               NUMBER                ##########      
    T1                   CONTENT              CHAR                  ##########      
    T1                   HIREDATE             DATE                  ##########

    2.在现有表的基础上建立表

    SQL> create table t2
        as select ename name,sal salary from emp;

    表已创建。

    创建t2时就插入了子查询中的数据。

    可以用别名改变列的名称。

    SQL> select * from t2;

    NAME           SALARY                                                           
    ---------- ----------                                                           
    SMITH             800                                                           
    ALLEN            1600                                                           
    WARD             1250                                                           
    JONES            2975                                                           
    MARTIN           1250                                                           
    BLAKE            2850                                                           
    CLARK            2450                                                           
    KING              5000                                                           
    TURNER          1500                                                           
    JAMES             950                                                           
    FORD             3000                                                                                                                      
    MILLER           1300                                                           

    已选择12行。

    只创建表结构,不插入数据,可以加一个假条件。

    SQL> create table t3(c1,c2,c3) as
         select ename,empno,sal from emp where 9=1;
    表已创建。

    SQL> select * from t3;
    未选定行

    3.修改表结构

    如果列为null,可以随便修改列的类型和宽度。

    SQL> alter table t1 modify(name char(4));
    表已更改。

    SQL> desc t1 
     名称                                     是否为空? 类型
     ------------------------------- -------- ----------------------------
     NAME                                                 CHAR(4)
     SALARY                                              NUMBER(5)
     CONTENT                                            CHAR(4 CHAR)
     HIREDATE                                           DATE

     

    如果有数据,修改会受限制,但不会破坏数据。

    SQL> alter table t2 modify(name char(4));
    alter table t2 modify(name char(4))
                          *
    第 1 行出现错误:
    ORA-01441: 无法减小列长度, 因为一些值过大

     

    如果不改变数据类型,只改变宽度的话,加大是可以的。

    SQL>  alter table t2 modify(name char(8));

    表已更改。

    SQL> desc t2
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     NAME                                               CHAR(8)
     SALARY                                            NUMBER(7,2)

    4.修改表的名称

    SQL> select * from tab;

    TNAME                          TABTYPE  CLUSTERID
    ------------------------------ ------- ----------
    DEPT                          TABLE
    EMP                            TABLE
    BONUS                       TABLE
    SALGRADE                 TABLE
    T2                             TABLE
    T1                             TABLE
    T3                             TABLE

    已选择7行。

    重命名

    SQL> rename t1 to t_1;

    表已重命名。

    验证

    SQL> select * from tab;

    TNAME                          TABTYPE  CLUSTERID
    ------------------------------ ------- ----------
    DEPT                           TABLE
    EMP                            TABLE
    BONUS                          TABLE
    SALGRADE                       TABLE
    T2                             TABLE
    T3                             TABLE
    T_1                            TABLE

    已选择7行。

    5.修改列的名称

    SQL> alter table t3 rename column c1 to name;

    表已更改。

    SQL> desc t3
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     NAME                                               VARCHAR2(10)
     C2                                                 NUMBER(4)
     C3                                                 NUMBER(7,2)

    6.表注释

    SQL> comment on table emp is 'employee table';

    注释已创建。

    SQL>  select comments from user_tab_comments where table_name='EMP';

    COMMENTS
    --------------------------------------------------------------------------------
    employee table

    7.列注释

    SQL> COMMENT ON COLUMN EMP.SAL IS '员工工资';

    注释已创建。

    SQL> select comments from user_col_comments where table_name='EMP' AND COLUMN_NAME='SAL';

    COMMENTS
    --------------------------------------------------------------------------------
    员工工资

    8.丢弃表

    SQL> select * from tab;

    TNAME                          TABTYPE  CLUSTERID
    ------------------------------ ------- ----------
    DEPT                           TABLE
    EMP                            TABLE
    BONUS                          TABLE
    SALGRADE                       TABLE
    T2                             TABLE
    T3                             TABLE
    T_1                            TABLE

    已选择7行。

    删除

    SQL> drop table t2;

    表已删除。

    验证

    SQL> select * from tab;

    TNAME                          TABTYPE  CLUSTERID
    ------------------------------ ------- ----------
    DEPT                           TABLE
    EMP                            TABLE
    BONUS                          TABLE
    SALGRADE                       TABLE
    T3                             TABLE
    T_1                            TABLE
    BIN$YZUBV4KDQdaHbfgXefa6Eg==$0 TABLE

    已选择7行。

    实际上并没有真的删除,只是改了名称。

    显示回收站的信息

    SQL> show recyclebin

    ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    T2               BIN$YZUBV4KDQdaHbfgXefa6Eg==$0 TABLE        2013-06-09:10:20:01

    SQL> select OBJECT_NAME,ORIGINAL_NAME,OPERATION,TYPE,DROPTIME from user_recyclebin;

    OBJECT_NAME                    ORIGINAL_NAME OPERATION TYPE  DROPTIME                           
    ------------------------------ ------------- --------- ----- ---------------------
    BIN$YZUBV4KDQdaHbfgXefa6Eg==$0 T2            DROP      TABLE  2013-06-09:10:20:01

    9.还原回收站

    将回收站的表还原

    SQL> flashback table t2 to before drop;

    闪回完成。

    SQL> select * from tab;

    TNAME                          TABTYPE  CLUSTERID
    ------------------------------ ------- ----------
    DEPT                           TABLE
    EMP                            TABLE
    BONUS                          TABLE
    SALGRADE                       TABLE
    T3                             TABLE
    T_1                            TABLE
    T2                             TABLE

    已选择7行。

    还原表的同时修改表名

    SQL> flashback table t2 to before drop rename to t_2;

    闪回完成。

    SQL> select * from tab;

    TNAME                          TABTYPE  CLUSTERID                               
    ------------------------------ ------- ----------                               
    BIN$w+zMkBr9SyeBdhobxWWgow==$0 TABLE                                            
    BONUS                          TABLE                                            
    DEPT                           TABLE                                            
    EMP                            TABLE                                            
    SALGRADE                       TABLE                                            
    T1                             TABLE                                            
    T3                             TABLE                                            
    T_2                            TABLE                                            

    已选择8行。

    10.清空回收站

    清空回收站内指定的表

    SQL> show recyclebin

    ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME          
    ---------------- ------------------------------ ------------ -------------------
    T2               BIN$w+zMkBr9SyeBdhobxWWgow==$0 TABLE        2013-06-27:23:48:51
    T_2              BIN$thCQdwB1RtmwVqD6O7k2KQ==$0 TABLE        2013-07-01:21:18:37

    SQL> purge table t2;

    表已清除。

    SQL> show recyclebin  --验证已清除

    ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME          
    ---------------- ------------------------------ ------------ -------------------
    T_2              BIN$thCQdwB1RtmwVqD6O7k2KQ==$0 TABLE        2013-07-01:21:18:37

     

    清除当前用户的回收站。不会影响其他用户。

    SQL> purge recyclebin ;

    回收站已清空。

    彻底删除表。绕过回收站,彻底删除表。

    SQL> create table t2
            as select ename name,sal salary from emp;

    表已创建。

    SQL> drop table t2 purge;

    表已删除。

    SQL> show recyclebin

    --回收站无数据。

     

    知识点

    • 建立表
    • 修改表
    • 注释表
    • 该名称
    • 丢弃表
    • 恢复丢弃的表
    • 初步认识数据字典

     返回目录  http://www.cnblogs.com/downpour/p/3155689.html

  • 相关阅读:
    Sqlserver中 登录用户只能看到自己拥有权限的库
    数据库的快照隔离级别(Snapshot Isolation)
    (0.2.4)Mysql安装——yum源安装
    sql server动态行列转换
    yum源的报错排除
    sql server dba概念系列引用
    (4.18)数据压缩
    如何查看windows某个目录下所有文件/文件夹的大小?(TreeSize Free)
    持续集成
    PM加油站
  • 原文地址:https://www.cnblogs.com/downpour/p/3160055.html
Copyright © 2011-2022 走看看