創建和管理表
對象
表(TABLE)基本的存儲單位
表名和列名(使用規則)
必須是字母開頭
必須是
只能包括A
在同一個用戶下不能頭重名的對象
不能是ORACLE的保留字
創建需求
必須有
CREATE TABLE 權限
足夠的存儲空間
語法
CREATE TABLE [SCHEMA(方案)
(COL DATATYPE [DEFAULT默認值][])
當前用戶所有的表
select table_name from user_tables;
當前用戶所有的對象
desc user_objects
當前用戶對象的別名
select * from cat;
字段類型
VARCHAR(size) 變長字符串類型
CHAR(size) 定長字符串類型
NUMBER(p
DATE
DATETIME 秒級最多可以到小數點後的
TIMESTAMP 帶有小數秒的日期
TIMESTAMP WITH TIME ZONE 帶時區的類型
TIMESTAMP WITH LOCAL TIME ZONE 帶時區的並會進行時區轉換的類型(同一時間在不 同地區看到的時間)
INTERVAL YEAR TO MONTH 按年和月的間隔存儲的類型
INTERVAL
INTERVAL DAY TO SECOND 按天
INTERVAL
LONG 變長的長字符串類型
CLOB 字符類型
RAW 二進制類型與CHAR對應
LONG RAW 二進制類型與LONG對應
BLOB
BFILE 以文件的形式存儲在操作系統中
ROWID 表中行的唯一地址(行地址)
方案
如果想訪問其他用戶或方案的表要加上用戶或方案作為前綴
必須指明
表名稱
列名
用戶表
被用戶創建和維護的一些表
包括了用戶自己的信息
數據字典表
被ORACLE數據庫創建和維護的一些表
包括了數據庫的信息
CTAS(子查詢建表)
CREATE TABLE table_name
[(col
as subquery(子查詢);
創建的表的列的數目匹配子查詢的列的數目
使用子查詢的列的名字和默認值定義表
注
*
如果有別名
*
*
*
使用ALTER TABLE 語句可以
*
語法
新增加的字段一定是放在表的最後
*
ALTER TABLE table modify (col datatype [default]
對默認值的修改只會影響到新插入的行
如果字段下有值的話
CHAR類型不能修改長度
*
ALTER TABLE table DROP COLUMN (COLUMN_NAME_LIST);
*
原理
可以使用 SET UNUSED 選項標記一列或者多列不可用
使用DROP SET UNUSED 選項刪除被被標記為不可用的列
語法
ALTER TABLE table SET UNUSED (COLlist多個) 或者 ALTER TABLE table SET UNUSED COLUMN col單個;
ALTER TABLE table DROP UNUSED COLUMNS;
刪除表
刪除關聯
改對象名
RENAME 對象原名 TO 要改的對象名
注
必須是對象的所有者才能進行改名的操作
截取
不能回滾
刪除表中所有數據
釋放存儲空間
語法
TRUNCATE TABLE 表名稱
DELETE 也可以刪除所有行
可以回滾
不釋放存儲空間
給表加注釋
comment on table table_name is
約束條件
如果經常用到約束條件的話
當定義約束的時候可以將定義的語句作為CREATE TABLE 中的參數的一部分來完成
表級別約束定義
CONSTRAINT 約束名 約束條件(字段名)
約束在表上強制了規則
如果有參照的花
ORACLE支持的約束條件
NOT NULL 非空
特點
UNIQUE 唯一
允許有空值(空值不做比較)
特點
PRIMARY KEY 主鍵
特點
在一個表中只允許一個主鍵
FOREIGN KEY 外鍵
外鍵參照的一定是主表的主鍵或唯一鍵
保證子表外鍵字段的值一定是主表中的被參照字段值的真子集
當主表字段被參照的時候
CONSTRAINT 約束名 FOREIGN KEY (外鍵字段名) REFERENCES 主表名(主表字段名);
如果在字段列表中定義外鍵就可以不寫 FOREIGN KEY 關鍵字
如下格式
ON DELETE CASCADE 當主表的行被刪除的時候
ALTER TABLE TABLE_NAME DROP (PK) CASCADE CONSTRAINTS;把作為主鍵的字段也同時刪除了
ON DELETE SET NULL 當主表的行被刪除的時候
CHECK
定義一個每行都必須滿足的條件
CREATE TABLE table_name
(
salary number(
CONSTRAINT 約束名 CHECK(SALARY>
);
約束的使用
約束的命名
創建時期
在創建表的同時或者在建表之後
定義級別
可以在表級定義或列級定義
在數據字典中可以查看約束
使用ALTER TABLE 語句
*
就算列名上已經有約束條件
添加
刪除
ALTER TABLE table_name PRIMARY KEY CASCADE;刪除主鍵的時候
*
ALTER TABLE table_name Disable constraint 約束名; 禁用
ALTER TABLE table_name ENABLE constraint 約束名; 啟用
*
ALTER TABLE table_name MODIFY(col type NOT NULL);
查看約束條件
//desc user_constraints
OWNER 擁有者
CONSTRAINT_NAME 約束名稱
CONSTRAINT_TYPE 約束類型
SEARCH_CONDITION check的條件
select constraint_name
from user_constraint where table_name=
視圖 (VIEW) 一個或多個表的數據集的邏輯表示(虛表
視圖不能提高查詢的性能
分類
簡單
數目
函數
分組數據
可以做DML操作
復雜
數目
函數
分組數據
不一定能做DML操作
視圖也可以用DESC描述
創建視圖
CREATE [or replace(修改視圖)] [force/noforce] VIEW view_name(col coltype
as
subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY[CONSTRAINT constraint]];
USER_VIEWS 關於視圖的字典
修改視圖
CREATE OR REPLACE 原視圖名 (字段列表)
AS 子查詢
包含
GROUP BY
DISTINCT
ROWNUM
不能對視圖進行刪除操作
包含
GROUP BY
DISTINCT
ROWNUM
通過表達式定義的列
不能對視圖進行修改操作
包含
GROUP BY
DISTINCT
ROWNUM
通過表達式定義的列
在視圖中沒有包含基表中的 NOT NULL 列
不能對視圖進行插入操作
使用視圖的原因
為了限制對數據的訪問
為了使復雜的查詢變得簡單
提供了數據的獨立性
提供了對相同數據的不同顯示
使用WITH CHECK OPTION 子句創建視圖
創建視圖時通過 WITH CHECK OPTION 子句確保執行的DML語句不會引起數據不出現在視圖上
在對視圖做DML操作的時候
CREATE OR REPLACE VIEW empvu
where check option constraint [empvu
WITH READ ONLY
不可以進行DML操作
刪除視圖
DROP VIEW view_name;
行內視圖
是一個在SQL語句中使用的帶有別名的子查詢
TOP
select [col_list]
from (select [col_list] from table_name order by top
where rownum<=n;
序列(SEPUENCE)產生的順序數字
索引(INDEX)用於提高查詢性能
同義詞(SYNONYM)對象的別名
create public synonym e for hr
user_synonyms;
創建同義詞要有權限
From:http://tw.wingwit.com/Article/program/Oracle/201311/16640.html