Oracle知識(shí)總結(jié)PPT:NVL函數(shù),DECODE函數(shù)的使用 ,死鎖,自聯(lián)接等【詩書畫唱】
可搜索內(nèi)容(這里含PPT的部分內(nèi)容的索引詞條):
02_Oracle的對象操作.ppt
表的創(chuàng)建
表的修改
表的刪除
約束的類型
NVL函數(shù)的使用?
DECODE函數(shù)的使用
自聯(lián)接
行級(jí)鎖
表級(jí)鎖
死鎖

02_Oracle的對象操作.ppt START

ORACLE網(wǎng)絡(luò)配置(包括三個(gè)配置文件)
ORACLE企業(yè)管理其中創(chuàng)建用戶
ORACLE9i中的三個(gè)默認(rèn)用戶
ORACLE中的權(quán)限分配
ORACLE數(shù)據(jù)類型

ORACLE中的表的創(chuàng)建、修改和刪除及其相關(guān)約束
ORACLE中的系統(tǒng)函數(shù)
ORACLE中的查詢、集合操作
ORACLE中的事務(wù)
ORACLE中鎖的概念
ORACLE中視圖、索引、序列、同義詞

表的命名規(guī)范
??
可以包含1 到 128 個(gè)字符,包括字母、符號(hào)和數(shù)字
第一個(gè)字符必須是字母
首字符之后的字符可以包括字母、數(shù)字或 #、$ 符號(hào)及 _
除非在引號(hào)內(nèi)定義對象名稱,否則不允許有空格



































































02_Oracle的對象操作.ppt END
表的創(chuàng)建 START
?CREATE TABLE [schema.]表名?
(字段名1 數(shù)據(jù)類型 [DEFAULT expression] [constraint],
字段名2 數(shù)據(jù)類型 [DEFAULT expression] [constraint],
……)
[STORAGE子句]
[其他子句…];?
例如:
CREATE TABLE NEW_STU?
? ? ?( STUNO? ? ?NUMBER(4,2),
? ? ? ?STUNAME VARCHAR2(6) not null,
? ? ? ?ADDRESS? VARCHAR2(20));
比較:
CREATE TABLE EMP_BAK AS SELECT * FROM EMP;
CREATE TABLE EMP_BAK1 AS SELECT * FROM EMP WHERE 1=2;
表的創(chuàng)建 END
表的修改 START
ALTER TABLE [schema.]表名
? ?[ADD { column datatype [DEFAULT expr]
? ? ? ? ? ? ? ? [column_constraint] ... | table_constraint
? ? ? ? ? ? ?} |
? ? ? ? ? ? ?{ column datatype [DEFAULT expr]
? ? ? ? ? ? ? ?[column_constraint] ... | table_constraint
? ? ? ? ? ? ?}?
? ?] 添加表的屬性
? ?[MODIFY? ? column [datatype] [DEFAULT expr]? ? ? ? [column_constraint] ...?
? ? ? ? ? ? |? (column [datatype] [DEFAULT expr] [column_constraint] ...?
? ? ]修改表的屬性?
? ? [DROP COLUMN] 列名 刪除表中的屬性
例如:ALTER TABLE NEW_STU ADD SEXY CHAR(2);
? ? ? ? ? ? ? ? ? ? ??
表的修改 END
表的刪除 START
DROP TABLE [schema.]表名
[CASCADE CONSTRAINTS]
其中CASCADE CONSTRAINTS代表級(jí)聯(lián)刪除所有約束
例如:
? ?DROP TABLE? NEW_STU? CASCADE CONSTRAINTS;
表的刪除 END
約束的類型 START
主鍵約束 primary key?
? ? ? ? ? ? ? 確保字段值不重復(fù)不為NULL
外鍵約束 foreign key?
? ? ? ? ? ? ? 確保字段值必須來自于指定表
非空約束 NOT NULL? ??
? ? ? ? ? ? ? 確保字段值不為NULL
檢查約束 check? ? ? ?
? ? ? ? ? ? ? 確保字段值的取值范圍
唯一約束 unique? ? ??
? ? ? ? ? ? ? ?確保字段值不重復(fù)
?
約束的類型 END
NVL函數(shù)的使用 START

SQL> SELECT ename, salary, (salary*12)+NVL(subsidy,0)
? 2? FROM? ?emp;
ENAME? ? ? ? ? SALARY? ? ?(SALARY*12)+NVL(SUBSIDY,0)
---------- --------- --------- ---------------KING? ?60000? ? 5000
BLAKE? 34200? ? 2850
CLARK? 29400? ? 2450
...
14 rows selected.
NVL函數(shù)的使用 END
DECODE函數(shù)的使用 START

SQL> SELECT job, salary,
? 2? ? ? ? ?DECODE(job, 'ANALYST', SAL*1.1,
? 3? ? ? ? ? ? ? ? ? ? ?'CLERK',? ?SAL*1.15,
? 4? ? ? ? ? ? ? ? ? ? ?'MANAGER', SAL*1.20,
? 5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SAL)
? 6? ? ? ? ? ? ? ? REVISED_SALARY
? 7? FROM? ?emp;
JOB? ? ? ? ? ? ?SAL REVISED_SALARY
--------- --------- --------------
PRESIDENT? ? ? 5000? ? ? ? ? ?5000
MANAGER? ? ? ? 2850? ? ? ? ? ?3420
MANAGER? ? ? ? 2450? ? ? ? ? ?2940
...
14 rows selected.
DECODE函數(shù)的使用 END
自聯(lián)接 START
自連接就是把某一張表中的行同該表中另外一些行連接起來。自連接主要用于查詢比較相同的信息,所比較的列必須有相同的或兼容的數(shù)據(jù)類型。
為了連接同一個(gè)表,需要為該表指定兩個(gè)不同的別名,只有這樣才能把該表邏輯上作為兩個(gè)不同的表使用。
例如
select a.ename,a.sal,b.ename?
from emp a,emp b?
where a.deptno=b.deptno;

自聯(lián)接 END
行級(jí)鎖 START
SELECT … FOR UPDATE語法:
SELECT … FOR UPDATE [OF columns][WAIT n | NOWAIT];
SQL> SELECT * FROM order_master WHERE vencode=’V002’
? ? ? ? ? ?FOR UPDATE OF odate, del_date;
SQL> UPDATE order_master SET del_date=’28-8月-05’
? ? ? ? ? ?WHERE vencode=’V002’;
SQL> COMMIT;
SQL> SELECT * FROM order_master WHERE vencode=’V002’
? ? ? ? ? ?FOR UPDATE WAIT 5;
SQL> SELECT * FROM order_master WHERE vencode=’V002’
? ? ? ? ? ?FOR UPDATE NOWAIT;
行級(jí)鎖 END
表級(jí)鎖 START
行共享 (ROW SHARE) – 禁止排他鎖定表(EXCLUSIVE),但是可以進(jìn)行DML語句操作
行排他(ROW EXCLUSIVE) – 禁止使用排他鎖和共享鎖
共享鎖(SHARE)--目的就是對表只讀?
鎖定表,僅允許其他用戶查詢表中的行
禁止其他用戶插入、更新和刪除行
多個(gè)用戶可以同時(shí)在同一個(gè)表上應(yīng)用此鎖
共享? 行排他(SHARE ROW EXCLUSIVE) – 比共享鎖更多的限制,禁止使用共享鎖及更高的鎖
排他(EXCLUSIVE) – 限制最強(qiáng)的表鎖,僅允許其他用戶查詢該表的行。禁止修改和鎖定表
表級(jí)鎖 END
死鎖 START
當(dāng)兩個(gè)事務(wù)相互等待對方釋放資源時(shí),就會(huì)形成死鎖
Oracle會(huì)自動(dòng)檢測死鎖,并通過結(jié)束其中的一個(gè)事務(wù)來解決死鎖
右邊是一個(gè)死鎖的例子
