042 第八章:管理數據和併發處理

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/SQLoracle中的過程化編程語言,爲oracle數據庫和應用程序提供了一種公共額編程環境,適用於全部的操做系統或者硬件平臺。他的主要特徵以下:
  1 對 SQL 的過程擴展
  2 平臺和產品間的可移植性
  3 更高級別的安全性和數據完整性保護
  4 支持面向對象的編程
管理 PL/SQL 對象(em中  「Administration(管理)--->program(程序))
PL/SQL  數據庫對象有多種類型:
程序包:程序包是由邏輯關係上相關的一些過程和函數組成的集合,程序包的這一部分又稱爲說明,用於描述應用程序的藉口;他聲明瞭可供使用的類型、變量、常量、異常錯誤、遊標和子程序;
程序包體:程序包體完整的定義了遊標和子程序,所以試試了說明,程序包體包含了實施明細和專用申明,這些內容不現實給調用方。
類型主體:類型主體是由與用戶定義的數據類型相關聯的一些方法(過程和函數)組成的集合;
過程:過程是用於執行特定操做的 PL/SQL塊;
  函數:函數是使用RETURN PL/SQL 命令返回單個值的 PL/SQL 塊。它是具備返回值的過程
  過程 (用於執行特定操做,使用參數列表傳入和傳出值。但是使用CALLSQL)或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 代碼對象,它們會在某些事件發生時自動運行或觸發。)
 
  觸發器觸發事件:
  DMLinsertupdate/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;
相關文章
相關標籤/搜索