一:表 數據庫
a.建立表語法格式 安全
create table table_name
(
字段1 類型1,
字段2 類型2,
字段3 類型3(也能夠給字段設置默認值)
...
); oracle
查詢一下表的結構:desc table_name 分佈式
b.給已存在的表增長新列:alter table tablen_ame add(列名1 列類型, 列名2 列類型...); 函數
查詢結果以下: 性能
新增了T3,T4和T5三列。 spa
c.給已存在的表刪除一個列:alter table table_name drop column column_name; 對象
查詢結果將發現T3列已經刪除。 索引
d.給已存在的表中的列重命名:alter table table_name rename column ole_col_name to new_col_name; rem
查詢結果將發現T4列已經更名爲hello。
e.給已存在的表中的列更改類型:
若是表中無數據:alter table 表名 modify 列名 新類型;
查詢結果將發現hello列的類型由varchar2類型變成了number類型。
若是表中有數據:
alter table 表名 add 新列名 新列類型;
update 表名 set 新列名=舊列名;
alter table 表名 drop column 舊;
alter table 表名 rename column 舊列名 to 新列名;(這句有玄機,好好理解)
這種方法會使列名發生變化,並且字段順序增長 有可能發生行遷移,對應用程序會產生影響,使用起來要慎重。
f.設置某字段無用:alter table table_name set unused column column_name;
這個時候你不管查詢表中的數據仍是查看錶的結構,你都看不到t5這個列了。可是此列仍然存在表中,只不過被Oracle給「關」起來了。無用的字段是沒法恢復的,由於這是DDL語句,要想恢復,只能恢復庫了。
刪除無用字段(會把字段刪除掉):alter table student drop unused column;
這時候這個無用字段被Oracle給「槍斃」了。不再存在了。
g.給表增長約束:alter table table_name add constraint constraint_name primary key(column_name);
給一個表中的某個字段增長主鍵或者外鍵約束。
刪除約束:alter table table_name drop constraint constraint_name;
表的數據字典爲user_tables,
約束的數據字典爲user_constraints,
另外一樣也能夠給一個表中的多個列同時設置爲主鍵,即複合主鍵,這裏就不作介紹了。
二:同義詞
同義詞是簡化的SQL語句,隱藏對象的名稱和全部者,爲分佈式數據庫的遠程對象提供了位置透明性,提供對對象的公共訪問。其語法以下:
create synonym 命令用於建立同義詞
drop synonym 命令用於刪除同義詞
user_synonyms 包含同義詞的數據字段
建立一個同義詞,就用上面的student表。若是你的當前用戶沒有建立同義詞的權限,你要首先用SYS用戶登陸受權。我用的是scott用戶,我就須要SYS用戶給scott用戶受權建立同義詞。
而後切換回scott用戶,建立student表的同義詞:
這個時候,同義詞ghk_student和表student效力是同樣的。可是我隱藏了student表(還有他的用戶scott,我只須要對同義詞進行操做便可)。
爲了說明問題,向ghk_student表中插入試驗數據:
這個時候查詢student表和ghk_student同義詞的結果是同樣的。
刪除同義詞:drop synonym synonym_name;
三:序列
序列是數據庫提供一種對象,可以提供自動的連續的惟一的值。其建立於法格式以下:
序列兩個重要屬性:nextval,currval,實際上是兩個函數
nextval產生下一個值,初始化序列值;
currval獲取當前序列值
下面咱們來作實驗,建立一個序列:
建個臨時表:
而後向表中插入序列,能夠反覆插入:
查詢temp_test表中的內容,能夠看到sno是連續的1,2,3,4,5。這裏我就不截圖了。
查詢序列當前值:select numseq.currval from dual;
查詢序列下一個值:select numseq.nextval from dual;
再次插入序列,看看結果如何?答曰:temp_test中的sno已經出現了跳點,再也不是6,7,8……等連續的了。
當你在select numseq.nextval from dual時候序列已經增長,再次插入的時候就是增長後的值了,因此和前面不連續了。可是連續插入的話,插入的值仍是連續的。
刪除序列語法:drop sequence sequence_name。
序列的數據字典:user_sequence。
四:視圖
視圖用來顯示一個或多個表中的數據。視圖不真正存儲數據,只是一些查詢語句,成爲「虛表」或「已存儲的查詢」。
視圖優勢:提供另一種級別的表安全性查詢;隱藏數據的複雜性;簡化用戶的SQL命令;將應用程序與基表定義的修改隔離開來;從另外一個角度提供數據。
scott用戶沒有建立視圖的權限,能夠用SYS用戶授予其權限,受權語句:
而後切換回scott用戶,建立一個視圖:
一個視圖創建完畢。
這個視圖就是截取表中的stuno字段和stuname字段,咱們查詢視圖的內容和查詢表中的內容是同樣的(除了列數不一樣)。向表中插入數據在查詢視圖的時候也能查出來,向視圖中插入數據在查詢表的時候也能查出來(沒有的列以默認或空做爲顯示,前提是視圖中沒有的列在表中是容許爲空的,不然視圖插不進去數據)。
刪除視圖:drop view view_name;
從新編譯視圖:alter view view_name compile;
爲何要從新編譯呢?
咱們建立視圖,在後臺數據庫建立了視圖對象,把語句進行編譯,把編譯後的對象存在視圖裏面,時間長了之後,可能源表發生變化,致使無效,因此須要按期從新編譯視圖。
視圖的數據字典:user_views。
五:索引
索引,又稱爲「快表」,提供快速檢索表中數據的機制,Oracle有索引段用於存儲索引。表更新時,索引亦會連帶更新。索引會加快SQL語句的執行,減小磁盤I/O,create index語句用於建立索引,在物理上和邏輯上獨立於表中的數據,oracle自動維護索引。
a.惟一值索引:定義在索引列中的值是不重複的;
oracle自動爲主鍵和惟一鍵建立惟一索引;
create unique index 語句用於建立惟一索引。
給上面的student表建立惟一值索引:
原來student表中的stuno不是主鍵,也不是惟一的,這回爲其創建惟一值索引。向表中插入數據時候若stuno重複會報錯。
b.組合索引:將表中某幾列字段的值合在一塊兒:
若是我要查詢stuno和stuname,Oracle會從索引段中查詢,而不是從整個表中查詢,提升效率。
c.反向鍵索引:會把索引表中的值按位反轉,適合向表中填入數據而不是更新輸入的場合:
d.位圖索引:建立重複率比較大的數據列:
索引數據字典:user_indexes。
——(索引須要繼續完善)——
六:簇
簇的含義是彙集的意思,其實和表差很少,create cluster語句用於建立簇,應首先建立簇,而後建立組成簇的表。
優勢:減小磁盤I/O,節省磁盤空間;
缺點:插入操做的性能下降;
有主外鍵關係表能夠考慮建立簇。
例子:
說明:首先建立一個簇class_cluster,簇包括一個字段classno。再建立兩個表stuClass和stuInfo,這兩個表都含有classno字段,類型也和簇同樣,語法格式如上。那麼向表中操做數據和普通表同樣,若是插入數據到表中,那麼classno是存儲在簇當中的。
另外,刪除簇時應先刪除含有簇的表。
簇的數據字典:user_clasters。