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;

 

 

 

 

 

 

 

 

 

 

 

 


  
 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章