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;