SQL
INSERT
一次建立一行。
INSERT
INTO
employees
VALUES
(
9999
,
'Bob'
,
'Builder'
,
'bob@abc.net'
,
NULL
,SYSDATE,
'IT_PROG'
,
NULL
,
NULL
,
100
,
90
);
·
插入另外一個表中的多行。(SELECT 語句中選擇的各個值與要插入的表中的各個列相關聯。列值按 INSERT 和 SELECT 語句中指定的順序進行匹配
insert
into
dept_80 (
select
*
from
employees
where
department_id
=
80
);
UPDATE
使用 UPDATE 命令可更改表的零行或多行
update
employees
set
salary
=
salary
*
1.1
where
employee_id
=
101
;
DELETE
使用 DELETE 命令可從表中刪除零行或多行。
delete
from
employees
where
employee_id
=
101
;
MERGE
使用 MERGE命令可在一個命令中執行 UPDATE和 INSERT。可將一個源中的數據合併到另外一個源
1
MERGE
INTO
jobs j
2
USING (
SELECT
*
FROM
jobs_acquisition) a
3
ON
(j.job_id
=
a.job_id)
4
WHEN
MATCHED
THEN
UPDATE
SET
j.job_title
=
a.job_title
5
WHEN
NOT
MATCHED
THEN
INSERT
6
(j.job_id,j.job_title,j.min_salary,j.max_salary)
7
VALUES
(a.job_id,a.job_title,a.min_salary,a.max_salary)
COMMIT:
提交更改,
ROLLBACK
:
回滾操做,撤銷更改
PL/SQL
(涉及到
SQL開發,若是僅考試能夠淺層掌握
)
概覽
:
PL/SQL是oracle中的過程化編程語言,爲oracle數據庫和應用程序提供了一種公共額編程環境,適用於全部的操做系統或者硬件平臺。他的主要特徵以下:
1、
對 SQL 的過程擴展
2、
平臺和產品間的可移植性
3、
更高級別的安全性和數據完整性保護
4、
支持面向對象的編程
管理 PL/SQL 對象(em中 「Administration(管理)--->program(程序))
PL/SQL
數據庫對象有多種類型:
程序包:程序包是由邏輯關係上相關的一些過程和函數組成的集合,程序包的這一部分又稱爲說明,用於描述應用程序的藉口;他聲明瞭可供使用的類型、變量、常量、異常錯誤、遊標和子程序;
程序包體:程序包體完整的定義了遊標和子程序,所以試試了說明,程序包體包含了實施明細和專用申明,這些內容不現實給調用方。
類型主體:類型主體是由與用戶定義的數據類型相關聯的一些方法(過程和函數)組成的集合;
過程:過程是用於執行特定操做的
PL/SQL塊;
函數:函數是使用RETURN PL/SQL 命令返回單個值的 PL/SQL 塊。它是具備返回值的過程
;
過程
:
(用於執行特定操做,使用參數列表傳入和傳出值。但是使用CALL(SQL)或EXECUTE調用(SQL*PLUS))
;
觸發器:觸發器是當數據庫中發生特定事件時執行的
PL/SQL塊,這些時間能夠基於表,若是表中插入行時,能夠但是數據庫時間,如在用戶登陸數據庫時。
程序包(程序包是由函數和過程組成的集合。每一個程序包由程序包體和程序包說明組成)
內置程序包(管理和維護實用程序,擴展功能)
DBMS_STATS:用於收集、查看和修改優化程序統計信息
DBMS_OUTPUT:經過 PL/SQL 生成輸出
DBMS_SESSION:經過PL/SQL 訪問 ALTER SESSION 和 SET ROLE語句
DBMS_RANDOM:生成隨機數字
DBMS_UTILITY:獲取時間、CPU 時間和版本信息;計算散列值,以及執行許多其它功能
DBMS_SCHEDULER:調度可從 PL/SQL 調用的函數和過程
DBMS_CRYPTO:對數據庫數據進行加密和解密
UTL_FILE:經過 PL/SQL 讀寫操做系統文件
觸發器(觸發器是存儲在數據庫中的 PL/SQL 代碼對象,它們會在某些事件發生時自動運行或「觸發」。)
觸發器觸發事件:
DML(insert、update/delete)、DDL(create,drop,alter,grant,revoke,rename)和數據庫事件(logon,logoff,startup,shutdown,servererror,suspend)
PL/SQL的結構以下:
DECLARATIVE
----聲明部分:在此聲明PL/SQL中使用到的變量、類型、及遊標,以及局部變量中的存儲過程和函數
BEGIN
----執行部分:過程及SQL語句,及程序的主要部分
EXCPTION
----執行異常部分:錯誤處理
END;
其中,執行部分不能省略;
鎖定
概覽
使用鎖定可防止多個會話同時更改同一數據。
鎖定是在指定語句的最低可能級別自動獲取的。
鎖定不會升級。
鎖定機制
執行插入、更新和刪除時使用行級鎖定
查詢不須要任何鎖定
自動隊列管理
在事務處理(使用 COMMIT 或 ROLLBACK 操做)結束以前一直保留鎖定
數據併發處理
默認狀況下,鎖定機制採用細粒度行級鎖定模式。不一樣的事務處理可在同一個表內更新不一樣的行,彼此不相互干擾。
鎖定模式
ROW SHARE:容許併發訪問鎖定的表,但禁止會話鎖定整個表進行獨佔訪問。
ROW EXCLUSIVE:與 ROW SHARE 相同,可是還禁止以 SHARE模式鎖定。更新、插入或刪除數據時會自動獲取ROW EXCLUSIVE 鎖定。
SHARE:容許併發查詢,但禁止更新鎖定的表。須要有(而且會自動請求)SHARE鎖定才能建立表的索引。
SHARE ROW EXCLUSIVE:用於查詢整個表,容許其餘人查詢表中的行,但禁止其餘人在 SHARE 模式下鎖定表或更新行。
EXCLUSIVE:容許查詢鎖定表,但禁止對鎖定表執行任何其它活動。須要有EXCLUSIVE 鎖定才能刪除表。
手動鎖定
:
LOCK TABLE employees IN EXCLUSIVE MODE;
DM
L
鎖定
:
針對正在更新的一行或多行的 EXCLUSIVE 行鎖定
針對包含這些行的表的 ROW EXCLUSIVE 表級鎖定
排隊機制
1、
等待鎖定的會話
2、
請求的鎖定模式
3、
請求鎖定的會話的順序
鎖定衝突
鎖定衝突的可能緣由
1、
未提交更改
2、
長時間運行事務處理
3、
沒必要要的高鎖定級別
4、
檢測鎖定衝突
在「Performance(性能)」頁選擇「Blocking Sessions(阻塞會話)」。
解決鎖定衝突
1、
提交或回退持有鎖定的會話
2、
終止持有鎖定的會話
em kill session鍵
sql
SQL> select sid, serial#, username
from v$session where sid in
(select blocking_session from v$session)
------------------------------------------------------
alter system kill session '144,8982' immediate;