跟我一起學Oracle 11g【5】----Oracle中的表(一)


前言

表是最常用的模式對象,也是最重要的數據對象之一。甚至在很多時候,我們說到數據庫操作,就以為對數據庫中的表的操作,而忘記了還有很多其他的操作對象,比如試圖、存儲過程等等。表示存儲數據的有效手段,因此對表的管理非常重要。還可以在表中定義約束,可以保證數據的有效性和完整性。

一。創建表

在Oracle數據庫中,用戶可以根據用戶不同的需求創建不同類型的表,常用的表類型有如下:

類型 說明
堆表 數據按照堆組織,一無系方式存放在單獨的表字段中,也是標准表,我們平常用的都是堆表。
索引表 數據以B樹結構,存放在主鍵約束所對應的索引段中    
簇表 簇有共享相同數據庫的一組表組成。在某些情況下,使用簇表可以節省存儲空間。
分區表 數據被划分為更小的部分,並且存儲到相應的分區段中,每個分區可以獨立管理和操作。

 

1.1 數據類型

數據類型

參數

描述

char(n)

n=1 to 2000字節

定長字符串,n字節長,如果不指定長度,缺省為1個字節長(一個漢字為2字節)

varchar2(n)

n=1 to 4000字節

可變長的字符串,具體定義時指明最大長度n,
這種數據類型可以放數字、字母以及ASCII碼字符集(或者EBCDIC等數據庫系統接受的字符集標准)中的所有符號。
如果數據長度沒有達到最大值n,Oracle 8i會根據數據大小自動調節字段長度,
如果你的數據前后有空格,Oracle 8i會自動將其刪去。VARCHAR2是最常用的數據類型。
可做索引的最大長度3209。

number(m,n)

m=1 to 38
n=-84 to 127

可變長的數值列,允許0、正值及負值,m是所有有效數字的位數,n是小數點以后的位數。
如:number(5,2),則這個字段的最大值是99,999,如果數值超出了位數限制就會被截取多余的位數。
如:number(5,2),但在一行數據中的這個字段輸入575.316,則真正保存到字段中的數值是575.32。
如:number(3,0),輸入575.316,真正保存的數據是575。

date

從公元前471211日到公元47121231日的所有合法日期,

long

可變長字符列,最大長度限制是2GB,用於不需要作字符串搜索的長串數據,如果要進行字符搜索就要用varchar2類型。

raw(n)

n=1 to 2000

可變長二進制數據,在具體定義字段的時候必須指明最大長度nOracle 8i用這種格式來保存較小的圖形文件或帶格式的文本文件,如Miceosoft Word文檔。
raw是一種較老的數據類型,將來會逐漸被BLOBCLOBNCLOB等大的對象數據類型所取代。

long raw

可變長二進制數據,最大長度是2GBOracle 8i用這種格式來保存較大的圖形文件或帶格式的文本文件,如Miceosoft Word文檔,以及音頻、視頻等非文本文件。
在同一張表中不能同時有long類型和long raw類型,long raw也是一種較老的數據類型,將來會逐漸被BLOBCLOBNCLOB等大的對象數據類型所取代。

blob
clob
nclob

三種大型對象(LOB),用來保存較大的圖形文件或帶格式的文本文件,如Miceosoft Word文檔,以及音頻、視頻等非文本文件,最大長度是4GB
LOB有幾種類型,取決於你使用的字節的類型,Oracle 8i實實在在地將這些數據存儲在數據庫內部保存。
可以執行讀取、存儲、寫入等特殊操作。

bfile

在數據庫外部保存的大型二進制對象文件,最大長度是4GB
這種外部的LOB類型,通過數據庫記錄變化情況,但是數據的具體保存是在數據庫外部進行的。
Oracle 8i可以讀取、查詢BFILE,但是不能寫入。
大小由操作系統決定。

我也把這個整理了一份文檔,在文章末尾的時候 可以把它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;

 

好,今天先到這里哦!。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM