SQL語言共分為四大類:數據查詢語言DQL,數據操縱語言DML, 數據定義語言DDL,數據控制語言DCL。其中用于定義數據的結構,比如 創(chuàng)建、修改或者刪除數據庫;DCL用于定義數據庫用戶的權限;在這篇文章中我將詳細講述這兩種語言在Oracle中的使用方法。
DML語言
DML是SQL的一個子集,主要用于修改數據,下表列出了ORACLE支持的DML語句。
插入數據
INSERT語句常常用于向表中插入行,行中可以有特殊數據字段,或者可以用子查詢從已存在的數據中建立新行。
列目錄是可選的,缺省的列的目錄是所有的列名,包括comlumn_id,comlumn_id可以在數據字典視圖ALL_TAB_COLUMNS,USER_TAB_COLUMNS,或者DBA_TAB_COLUMNS中找到。
插入行的數據的數量和數據類型必須和列的數量和數據類型相匹配。不符合列定義的數據類型將對插入值實行隱式數據轉換。NULL字符串將一個NULL值插入適當的列中。關鍵字NULL常常用于表示將某列定義為NULL值。
下面的兩個例子是等價的。
或
更新數據
UPDATE命令用于修改表中的數據。
刪除數據
DELETE語句用來從表中刪除一行或多行數據,該命令包含兩個語句:
1、關鍵字DELETE FROM后跟準備從中刪除數據的表名。
2、WHERE后跟刪除條件
清空表
如果你想刪除表中所有數據,清空表,可以考慮使用DDL語言的TRUNCATE語句。TRUNCATE就像沒有WHERE子句的DELETE命令一樣。TRUNCATE將刪除表中所有行。TRUNCATE不是DML語句是DDL語句,他和DELETE右不同的特點。
STORAGE子串是可選的,缺省是DROP STORAGE。當使用DROP STORAGE時將縮短表和表索引,將表收縮到最小范圍,并重新設置NEXT參數。REUSE STORAGE不會縮短表或者調整NEXT參數。
TRUNCATE和DELETE有以下幾點區(qū)別
1、TRUNCATE在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令DELETE將被撤銷,而TRUNCATE則不會被撤銷。
2、TRUNCATE是一個DDL語言,向其他所有的DDL語言一樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。
3、TRUNCATE將重新設置高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經過TRUNCATE操作后的表比DELETE操作后的表要快得多。
4、TRUNCATE不能觸發(fā)任何DELETE觸發(fā)器。
5、不能授予任何人清空他人的表的權限。
6、當表被清空后表和表的索引講重新設置成初始大小,而delete則不能。
7、不能清空父表。
SELECT FOR UPDATE
select for update語句用于鎖定行,阻止其他用戶在該行上修改數據。當該行被鎖定后其他用戶可以用SELECT語句查詢該行的數據,但不能修改或鎖定該行。
鎖定表
LOCK語句常常用于鎖定整個表。當表被鎖定后,大多數DML語言不能在該表上使用。LOCK語法如下:
其中l(wèi)ock_mode有兩個選項:
share 共享方式
exclusive 唯一方式
例:
死鎖
當兩個事務都被鎖定,并且互相都在等待另一個被解鎖,這種情況稱為死鎖。
當出現死鎖時,ORACLE將檢測死鎖條件,并返回一個異常。
[NextPage]
事務控制
[1] [2] [3] 下一頁
正在看的ORACLE教程是:Oracle數據操作和控制語言詳解。2G的表空間中,如果我們缺省的round-robin給事務分配回滾段,4個大事務將有4個獨立的回滾段,每個回滾段的大小將是1G,如果這樣我們的2G表空間就不夠,而數據庫管理員就不得不在夜晚2點起來工作,每個事務都由以下面的語句開始:
[NextPage]
建立和修改用戶
上一頁 [1] [2] [3] 下一頁
正在看的ORACLE教程是:Oracle數據操作和控制語言詳解。通過SET ROLE語句授予或撤銷角色權限。然而,角色權限不能依靠存儲在SQL中的權限。如果函數、程序、包、觸發(fā)器或者方法使用另一個計劃擁有的對象,那么就必須直接給對象的擁有者授權,這是因為權限不會在會話之間改變。上一頁
上一頁 [1] [2] [3]
新聞熱點
疑難解答