前言
表是最常用的模式對象,也是最重要的數據對象之一。甚至在很多時候,我們說到數據庫操作,就以為對數據庫中的表的操作,而忘記了還有很多其他的操作對象,比如試圖、存儲過程等等。表示存儲數據的有效手段,因此對表的管理非常重要。還可以在表中定義約束,可以保證數據的有效性和完整性。
一。創建表
在Oracle數據庫中,用戶可以根據用戶不同的需求創建不同類型的表,常用的表類型有如下:
類型 | 說明 |
堆表 | 數據按照堆組織,一無系方式存放在單獨的表字段中,也是標准表,我們平常用的都是堆表。 |
索引表 | 數據以B樹結構,存放在主鍵約束所對應的索引段中 |
簇表 | 簇有共享相同數據庫的一組表組成。在某些情況下,使用簇表可以節省存儲空間。 |
分區表 | 數據被划分為更小的部分,並且存儲到相應的分區段中,每個分區可以獨立管理和操作。 |
1.1 數據類型
數據類型 |
參數 |
描述 |
char(n) |
n=1 to 2000字節 |
定長字符串,n字節長,如果不指定長度,缺省為1個字節長(一個漢字為2字節) |
varchar2(n) |
n=1 to 4000字節 |
可變長的字符串,具體定義時指明最大長度n, |
number(m,n) |
m=1 to 38 |
可變長的數值列,允許0、正值及負值,m是所有有效數字的位數,n是小數點以后的位數。 |
date |
無 |
從公元前4712年1月1日到公元4712年12月31日的所有合法日期, |
long |
無 |
可變長字符列,最大長度限制是2GB,用於不需要作字符串搜索的長串數據,如果要進行字符搜索就要用varchar2類型。 |
raw(n) |
n=1 to 2000 |
可變長二進制數據,在具體定義字段的時候必須指明最大長度n,Oracle 8i用這種格式來保存較小的圖形文件或帶格式的文本文件,如Miceosoft Word文檔。 |
long raw |
無 |
可變長二進制數據,最大長度是2GB。Oracle 8i用這種格式來保存較大的圖形文件或帶格式的文本文件,如Miceosoft Word文檔,以及音頻、視頻等非文本文件。 |
blob |
無 |
三種大型對象(LOB),用來保存較大的圖形文件或帶格式的文本文件,如Miceosoft Word文檔,以及音頻、視頻等非文本文件,最大長度是4GB。 |
bfile |
無 |
在數據庫外部保存的大型二進制對象文件,最大長度是4GB。 |
我也把這個整理了一份文檔,在文章末尾的時候 可以把它download下來!~。
1.2創建表的語法
Create table [schema,] table_name(
column_name data_type [default express] [constraint]
[,column_name data_type [default express] [constraint]]
[,column_name data_type [default express] [constraint]]
);
上面的一些解釋,需要明白下,[]表示這在創建表的時候是可選的。而沒有[]這個東西表明在創建的時候 是必須要寫的!~~~比方說[constraint] 這個給當前列加約束,那么約束是可以加或者不加的!
Scheme:指定表所屬的用戶名或者所屬的用戶模式名稱。
table_name:顧名思義,就是表名。
column_name:列名
data_type:數據類型,就像在1.1中的寫的。
default express:默認值。
constraint:添加列的約束,表示該列必須要滿足的規則。
比如:
not null表示非空,就是這個字段不能為空。
1.3查看表信息
當我們創建了表之后,可以通過describe(簡寫desc)進行查看表的結構。如下:
這個命令很有用,特別是在我們運用數據字典的時候,因為你剛開始不知道這個數據字典里的字段。
當然,我們還可以通過查詢數據字典試圖user_tables 來查詢表的有關信息!
這個只是表明有這個表,那如果要查看表的結構呢,就像和desc一樣呢?那么你可以用到user_tab_columns數據字典,如下:
1.4指定表的模式
在上面創建表的語法中,有一個是scheme的字段!~,它就是指定表的模式。用來表示所屬的用戶名或者所屬的用戶模式名稱。如下圖:
1.4指定重做日志
在創建表的時候,如果使用Logging字句,則表示對表的所有操作都將記錄到重做日志中。
接着,我們在數據字典里user_tables進行查看 是否果真如此,如下:
當然你也可以使用nologging這個,表示不需要日志!~
1.5指定緩存
如果一個用戶請求的數據是最近才開始使用的,那么這個數據最有可能存放在緩沖中。那么有人可能會問,在緩沖有什么好處呢?其實,好處是大大滴好。因為在緩沖的話,下次要在次讀取數據的話,就不需要從磁盤中讀了,直接從緩沖力拿 不是很方便嗎?
創建表的時候,可以用cache關鍵改變這種結果。 哦 對了,Oracle 是使用LRU(least Recently Userd)來管理緩沖的。如果在表的后面加上cache的話,那么Oracle在執行LRU的時候,就不會把這個表相關的數據給換出去。如圖:
二。修改表
創建了表之后,那當然就需要對表進行維護咯!
2.1增加和刪除列
①增加列
語法是:
alter table 表名 add 列名 數據類型
②刪除列
語法如下:
alter table 表名 drop column 列名
你也可以同時刪除幾個,那么列名需要用()起來~~
alter table 表名 drop column (列名1,列名2.。。)
比如:alter table mybook3 drop column publicdata; 就把剛的那列刪除了。
2.2使用unused
如果對一個表刪除大量的數據,由於需要對每個列的記錄進行處理,所以刪除的速度可能會很慢。這個時候,我們可以使用關鍵字unused來代替這個操作!~啥意思呢?其實這在用戶的角度來說,這個和刪除是沒有分別的,只是被標記為unused的字段依然留在數據庫中,可以想象為被注釋了,實質上空間並沒有釋放。
語法:
alter table 表名 set unused(列名);
通過數據字典user_unused_col_tabs可以查看數據中的有哪些字段被標記為unused。
當然 也可以刪除這個標記,語法如下:
alter table 表名 drop unused 列名
2.2更新列
有時候,我們創建了表之后,發現需要對一些字段進行修改,比如更新列名、列的數據類型、數字列的精度以及列的默認值等等。
①修改列名
更新列的語法:
alter table 表名 rename column 老的列名 to 新的列名
②修改列的數據類型
在我們修改數據類型的時候,我想要注意2點:
☆在表里有數據的情況下,一般情況下我們無需把數據的長度由短向長的改變,為什么呢?很簡單啊,會精度丟失呀!~但是你可以這么做,只是你要知道后果。
☆當表里沒數據時,那就可以逆向進行改變了。
語法如下:
alter table 表名 modify 列名 新的數據類型
修改列的精度 也是一樣道理!
③修改列的默認值
語法如下:
alter table 表名 modify(列名 default 默認值)
2.3重命名表
語法:
alter table 表名 rename to 新表
這個很簡單。
NOTE;對表進行重命名很簡單呢,但是不建議這樣用。因為這樣做的影響非常的大。雖然Oracle可以自動更新數據字典中表的外鍵、約束和表關系等,但是還不能更新數據庫中的存儲代碼等等。所以,需要謹慎使用。
2.4刪除表定義
如果用戶需要刪除所創建的表的定義,可以使用如下語法:
drop table 表名 [cascade constraints | purge]
我們需要知道的是刪除表定義和刪除表數據的區別,
刪除表定義,刪除表的結構和數據都不存在。
刪除表數據,只是刪除數據但是結構還在。
在使用drop table語句的時候 ,可以使用如下2個參數:
★cascade constraints
表示在刪除表,不僅刪除本表,而且刪除所有應用這個表的試圖、約束等等。因為有些表因為關系(比如外鍵,這個下個章節會說),所以刪除不了,會提示有錯,那這個時候你需要使用這個。
我新建2個表:
班級表:myclass
學生表:
ok,我們有了上面的環境之后,我們往2個表中隨便插入一些數據。然后,我現在刪除myclass表,結果如下:
現在,我們把cascade constraints 這個加上,結果如下:
★purge
表示在刪除表定義之后,立即釋放該表所占用的資源空間。
語法
drop table 表名 purge;
好,今天先到這里哦!。