程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle_DDL,oracleddldml

Oracle_DDL,oracleddldml

編輯:Oracle教程

Oracle_DDL,oracleddldml


DDL是“數據定義語言”( Data Defination Language )的縮寫,它包含CREATEALTERDROP 、RENAME 、TRUNCATE等命令,用來對數據庫對象進行創建、修改、刪除、重命名等操作。
其中CREATE 、ALTER和DROP命令的功能十分強大,幾乎可以對所有的數據庫對象進行管理,例如表、視圖、索引、存儲程序等。

表的創建

CREATE命令可用來創建表。

創建表時要確定表的結構,即確定表中各列的名字和類型。
在關系數據庫中,表被看做是一個關系,表中的每個列是關系中的屬性,是一個不可再分割的基本單位。
表中的行對應關系中的一個元組。

表的結構確定下來以後,就可以通過INSERT語句向表中插入數據了。
用來創建表的CREATE命令格式為:

CREATE TABLE 表名稱(

列 l 數據類型,
列 2 數據類型,
..

);

表名是代表這個數據庫對象的名稱,對表名的要求是必須以字母開頭,長度為l ~ 30個字符,而且只能包含A ~ Z 、a ~ z 、0 ~ 9 、一、$和#等字符,不能使用Oracle 的保留字,在同一個用戶模式中不能擁有兩個同名的表。

表中的每個列都有一個名字,在同一個表中不能有同名的列。

列的數據類型可以是系統預定義的類型,也可以是用戶自定義類型。

數據類型描述
VARCHAR2(n) (可變長度的字符串.最大長度可達4000KB)
CHAR ( n) (固定長度的字符串,最大長度可達2000KB)
NUMBER (浮點類型的數據)
NUMBER ( m.n) (可表示整數和小數, m和n 分別為精度和1 小數位數)
DATE (日期型數據)
LONG (可變長度的字符串,最大長度可達2GKB)
RAWLONG RAW (存儲二進制數據可變長度字符串
LOB 大對象類型  (存儲大型的無結構的數據,如圖形圖像文本等數據,最大可達4GKB)

在創建表時,可以通過DEFAULT關鍵字為列指定一個默認值,這樣當用INSERT語句插入一行時,如果沒有為該列指定值,就以默認值填充,而不是插入空值。

如果要驗證表的結構是否與期望的結果一致,可以在表創建之後通過DESC命令查看表的結構。
這個命令只能列出表中各列的列名數據類型以及是否為空等屬性。

在創建表時,還可以以另一個表為模板確定當前表的結構。一般情況下,可以從一個表復制它的結構,從而快速創建一個表。
復制表的結構是通過子查詢來實現的,即在CREATE語句中可以嵌套SELECT語句。這時的CREATE語句格式為:

CREATE TABLE 表名稱 AS SELECT 語句;

CREATE語句將根據SELECT子句中指定的列,確定當前表的結構,然後將子查詢返回的數據插入到當前表中,這樣在創建表的同時向表中插入了若干行。

一般情況下,在通過這種方式創建的表中,列名和列的定義與原來的表一致。

如果希望在創建一個新表時指定與原來的表不同的列名,可以在CREATE語句中的表名之後指定新的列名。
如果只希望拷貝表的結構,而不復制表中的數據,可以將SELECT子句中的條件指定為一個永遠為假的條件。

實際上,創建表的語句是非常復雜的,在表上可以定義約束,可以指定存儲參數等屬性。

在這裡,順便向讀者介紹兩個概念,一個是模式( Schema ),一個是數據字典( Datadictionary )。
模式指的是一個用戶所擁有的所有數據庫對象的邏輯集合。

在創建一個新用戶時,同時創建了一個同名的模式,這個用戶創建的所有數據庫對象都位於這個模式中。
用戶在自己的模式中創建表,需要具有CREATE TABLE 系統權限,如果需要在別人的模式中創建表,則需要具有CREATE ANY TABLE權限。
在訪問其他用戶的數據庫對象時,要指定對方的模式名稱,例如,通過SCOTT.EMP 引用SCOTT用戶的emp表。

數據字典是一些視圖,從這些視圖中可以查看一些重要的系統數據,如數據庫中的表、索引、權限、表空間等信息。
這些視圖是在創建數據庫時自動創建的,它們的內容也是由數據庫服務器自動維護的。
用戶可以查看以下幾種形式的數據字典視圖:
·以USER_開始的視圖,
·以ALL_開始的視圖,
.以DBA_開始的視圖。
從USER_視圖中可以查看當前用戶所創建某類數據庫對象,如在USER_TABLES 中可以查看當前用戶所創建的任何一個表的信息。
從ALL_視圖中可以查看當前用戶有權限訪問的某類數據庫對象,如在ALL_TABLES 中可以查看當前用戶有權限的任何一個表的信息。
在DBA視圖中可以查看當前數據庫中所有的某類對象的信息,如在DBA TABLES 中可以查看當前數據庫中所有的表。
DBA_視圖只能由數據庫管理員(一般是SYS 用戶)查看。

如何修改表的結構

表在創建以後,如果在使用的過程中發現表的結構不合理,可以通過執行ALTER命令修改它的結構。
修改表結構的操作包括增加列、修改某個列的定義、刪除列、增加約束修改約束
表的重命名等。
ALTER命令可以使用若干個子句,通過這些子句可以完成修改表結構的操作。

可以使用的子句包括ADDDROPMODIFYRENAME等。

如果要在表中增加一個列,通過ADD子句指定一個列的定義,至少要包括列名和列的數據類型。
增加列的語句結構為:
ALTER TABLE 表名
ADD (列 1 ,數據類型,
列 2, 數據類型,
. . . ) ;

需要注意的是,如果一個表中已經有數據,這時增加一個列時,不能將該列約束為“非空(NOT NULL )”,因為我們不能一方面要求該列必須有數據,而另一方面又無法在增加列的同時向該列插入數據。

也就是說,要往一個表中增加一個非空列時,這個表必須是空的。

如果表中已經有數據,單獨使用“NOT NULL”約束是不行的。
一種好的解決辦法是為該列指定默認值,這樣在增加一個非空列的同時,為這個列填充了指定的默認值。
ALTER TABLE 表名稱 ADD 列名稱 數據類型 DEFAULT 默認值 NOT NULL;

利用ALTER語句還可以從表中刪除一個列。

用來完成這個操作的子句是DROP 。

用於刪除列的ALTER語句格式為:

ALTER TABLE 表名稱 DROP COLUMN 列名稱;

一個列時,這個列將從表的結構中消失,這個列的所有數據也將從表中被刪除。

原則上可以刪除任何列,但是一個列如果作為表的主鍵,而且另一個表已經通過外鍵在兩個表之間建立了關聯關系,這樣的列是不能被刪除的。

注:此時可以通過刪除外鍵約束,這樣就可以刪除主鍵列;亦或者可以通過刪除主鍵約束,在刪除主鍵約束時要加上關鍵字CASCADE。

一旦主鍵約束被刪除了,外鍵約束也就被存在了,因為外鍵是依賴於主鍵列的。

如果要修改表中一個列的定義,可以使用ALTER語句的MODIFY 子句。

通過MODIFY 子句可以修改列的長度、非空、數據類型等屬性。

注:MDOIFY子句修改列屬性要根據表中已有數據來決定能否修改。
使用了MODIFY子句的ALTER語句格式為:

ALTER TABLE 表名稱 MODIFY 列名稱;

需要注意的是,如果表中目前沒有數據,那麼可以將一個列的長度增加或減小,也可以將一個列指定為非空。
如果表中已經有數據,那麼可以增加列的長度,但在減少列的長度時,可能會因為列長度小於列的最大值而不允許修改;如果該列有空值,不能將該列指定為非空。

通過ALTER語句,還可以為表進行重命名,也就是將表的名字改為另一個名字。

為表重命名的ALTER語句格式為:

ALTER TABLE 表名稱 RENAME TO 新表名稱;

其他的DDL命令

除了CREATE和ALTER兩條主要的命令外, DDL還包括DROP 、RENAME和TRUNCATE等幾條命令。
其中DROP命令的功能是刪除一個對象,通過這條命令幾乎可以刪除任何類型的數據庫對象。
用來刪除表的DROP命令的格式為:

DROP TABLE 表名稱;

數據庫對象刪除後,它的有關信息就從相關的數據字典中刪除。
RENAME命令的作用是對數據庫對象重新命名。

對表進行重新命名的命令格式為:

RENAME 原表名稱 TO 新表名稱;

表被重新命名以後,它的信息就會在相關的數據字典中更新。

TRUNCATE命令的作用是刪除表中的數據。

與DELETE語句不同的是, TRUNCATE命令將刪除表中的所有數據,不需要指定任何條件,而且數據被刪除後無法再恢復。
這條命令的語法格式為:

TRANCATE TABLE 表名稱;

TRUNCATE命令作用的結果是刪除所有的數據,而且不可恢復,所以這條命令要慎用。

從執行結果來看,一條TRUNCATE語句相當於下列兩條語句的組合:

DELETE FROM 表名稱;

COMMIT;

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved