oracle9i学习笔记之八 创建和维护表

 1.数据库对象
  对象                        描述
  表                存储数据的基本单元,由行和列组成
  视图              来自一个或多个表的数据的子集
  序列              产生关键字值
  索引              提高某些查询的性能的数据结构
  同义词            赋予对象另外的名字

2.CREATE TABLE语句
  必须具备:
    -CREATE TABLE的权限
    -一定的存储空间
  CREATE TABLE [schema.]table
               (column datatype [DEFAULT expr]
                [,column datetype [DEFAULT expr]]...);
  需要指定:
    -表名
    -列名、列的类型及列的宽度

1)表和列的命名规则
  -必须以字母开头
  -长度为1-30个字符
  -只能包含A-Z,a-z,0-9,_,$和#
  -对于同一个用户不能使用和其他对象相同的名字
  -不能是Oracle的保留字
  -名字是不区分大小写的
  -在不同的表中命名相同的实体采用保持一致的原则

2)引用其他用户的表
  -属于其他用户而不属于当前用户的表
  -需使用用户名作为表的前缀

3)DEFAULT选项
  -指定在插入数据时,列的默认值
  ...hiredate DATE DEFAULT SYSDATE,...
  -合法的值可以是字面值、表达式或SQL函数
  -非法的值是另一个列的名称或虚拟列
  -默认的数据类型必须和列的类型匹配

4)数据类型
     类型             描述
  VARCHAR2(size)      变长字符串
  CHAR(size)          固定长度字符串
  NUMBER(p,s)         变长数值
  DATE                日期和时间值
  LONG                可存放高达2GB的变长字符数据
  CLOB                可存放高达4GB的变长数据
  RAW and LONG RAW    二进制数据
  BLOB                可存放高达4GB的二进制数据

5)创建表
  例:CREATE TABLE dept1
             (deptno NUMBER(3,2),
              dname  VARCHAR2(2));
  验证:DESC dept1
  结果:
        名称      是否为空?       类型 
        DEPTNO                    NUMBER(3,2) 
        DNAME                     VARCHAR2(2) 

6)数据库中的表
  -用户表(用户拥有)
  -数据字典表(SYS用户拥有)
   -USER_XXX:记录当前用户拥有的对象
   -ALL_XXX:记录可被当前用户访问的对象
   -DBA_XXX:记录数据库所有的对象
   -V$_XXX:记录数据库的动态性能数据

  例1:列出当前用户的表
       SELECT table_name
       FROM   user_tables;
  结果:
        TABLE_NAME 
          BONUS 
          COPY_DEPT 
          DEPT 
          DEPT1 
          EMP 
          SALGRADE 

  例2:列出当前用户不同的对象类型
       SELECT DISTINCT object_type
       FROM   user_objects;
  结果:
       OBJECT_TYPE 
         INDEX 
         TABLE 

  例3:查询当前用户的表、视图、同义词及序列
       SELECT *
       FROM   user_catalog;
  结果:
          TABLE_NAME   TABLE_TYPE 
          BONUS        TABLE 
          COPY_DEPT    TABLE 
          DEPT         TABLE 
          DEPT1        TABLE 
          EMP          TABLE 
          SALGRADE     TABLE 

7)用子查询创建表
  CREATE TABLE table
         [column(,column...)]
  AS subquery;
  -在CREATE TABLE语句的AS子句中使用子查询可以在创建表的同时插入数据
  -所指定列的数量和类型必须和子查询中列的数量和类型相匹配
  -如果没有指定要创建表的列,那么创建出的新表的名称和子查询中的各列名相同
  -完整性约束不被传递
 
  例:CREATE TABLE dept30
      AS
         SELECT empno,ename,sal*12 ANNSAL,hiredate
         FROM   emp
         WHERE  deptno=30;
     
  验证:DESC dept30

3.ALTER TABLE语句
  -使用ALTER TABLE语句可以
   -添加一个列
   -为新列定义默认值
    ALTER TABLE table
    ADD         (column datatype[DEFAULT expr]
                 [,column datatype]...);

    例:
       ALTER TABLE dept30
       ADD         (job VARCHAR2(9));
 
   -修改已存在的列
    ALTER TABLE table
    MODIFY      (column datetype [DEFAULT expr]
                 [,column datetype]...);

    例:ALTER TABLE dept30
        MOIDFY      (ename VARCHAR2(15));

   -删除一个列
    ALTER TABLE table
    DROP        (column column_name
                 [,column column_name]...);  
  
    例1:ALTER TABLE dept30
         DROP  column ename;

    例2:ALTER TABLE dept30
         DROP(ename);
 
4.SET UNUSED选项
  -SET UNUSED信息存储在user_unused_col_tabs视图
1)标记不使用的列:
   ALTER TABLE table_name
     SET UNUSED COLUMN column_name;
  或者:
   ALTER TALBE table_name
     SET UNUSED(column_name)

2)删除标记为不使用的列
  ALTER TABLE table_name 
    DROP UNUSED COLUMNS;

5.删除表
  -表中的所有数据和结构都被删除
  -任何悬而未决的事务都将被提交
  -所有的索引被删除
  -不能回滚该语句

  DROP TABLE dept30;

6.修改对象的名称
  -要修改表、视图、序列或同义词的名称可以使用RENAME语句
  -必须拥有对象的所有权
 
  RENAME dept1 TO department;

7.截断表
  -TRUNCATE TABLE 语句
    -删除ciao中所有记录
    -释放该表的存储空间
  -使用TRUNCATE移除后不能回滚
  -另一种删除记录的方法可以使用DELETE语句
 
  TRUNCATE TABLE department;

8.给表添加注释
  -使用COMMENT语句,可以为表、列、视图、快照添加注释
  -可以通过设置空字符串的方式从数据库中删除注释
 
  COMMENT ON TABLE table | COLUMN table.column IS 'text';

  例:COMMENT ON TABLE emp
      IS  'Employee Information';

  注释可以通过以下字典表查询

  -ALL_COL_COMMENTS
  -USER_COL_COMMENTS
  -ALL_TAB_COMMENTS
  -USER_TAB_COMMENTS

 
练习
1.创建如下表(test):
  column_name   data_type   length
   ID           NUMBER       7
   NAME         VARCHAR2     2

   CREATE TABLE test
   (ID    NUMBER(7),
    NAME  VARCHAR2(2));
  
2.利用emp表来创建test_t表,选取emp表中的empno、ename、job、sal字段

  CREATE TABLE test_t
  AS    SELECT empno,ename,job,sal
        FROM   emp;
       
3.更改test_t表的ename字段的长度,由VARCHAR2(10)变为VARCHAR2(20)

  ALTER TABLE test_t
       MODIFY ename VARCHAR2(20);

4.在test_t表中增加address字段,长度为varchar2(10)
 
  ALTER TABLE test_t
         ADD  address VARCHAR2(10);


5.将test_t表中的address字段删除
 
  ALTER TABLE test_t 
         DROP column address;

  ALTER TABLE test_t
          DROP(address);

6.设置test_t表的sal字段为UNUSED状态,然后将该字段删除

  ALTER TABLE test_t
     SET UNUSED COLUMN sal;
  或:
  ALTER TABLE test_t
     SET UNUSED(sal);

  ALTER TALBE test_t
     DROP UNUSED COLUMNS;
 
7.删除test_t表中的数据

  DELETE FROM test_t;
  或:
  TRUNCATE TABLE test_t;

8.将test_t表重新命名为test

  RENAME test_t TO test;

9.删除test表

  DROP TABLE test;

 

 

 

 

 

 

 

 

 

 

 

 


  
 


 

你可能感兴趣的:(oracle,oracle,table,comments,数据库,subquery,delete)