【HICP Gaussdb】數據庫 數據庫管理(存儲過程 函數 對象 近義詞 觸發器 事務類型)-9


存儲過程
存儲過程在大新數據庫系統中,一組為了完成特定功能的SQL語句集 存儲在SQL數據庫中

優勢: SQL進行封裝 調用方便
            存儲過程會進行編譯 提升用戶執行SQL語句集的速度
            系統管理員 通過執行某一存儲過程的權限進行限制 ,能實現對相應數據的訪問權限的限制 保障數據安全

# 創建存儲過程 create or replace procedure if not exists schema.procedure_name IS|AS
begin
insert into table_name values(1,"xxx"); commit; end; /

 

執行存儲過程
# 自定義存儲過程如果和函數重名 優先執行函數
   執行存儲過程時 不允許使用常亮對INPUT OUT類型 輸入參數賦值
   執行不帶參數的存儲過程 不需要帶括號
   執行存儲過程時 可以用; 和 / 作為結束符 但是兩個結束符 不能一起使用 如果一起會報錯
[ exec | call ]  schema.procedure_name;

 

自定義函數
函數用於返回特定的值 需要有一個return或者多個

create or replace if not exists function schema.funtion_name(a int ,b varcahr2) return int 

as

  c int;

  d int;

begin

   c:=a;

   d:=b;

return 2*(c+d);

end perimeter;

/

# 刪除自定義函數 

 
         

drop function if exists schema.function_name 

 

 

同義詞 數據對象的別名

代表數據對象的一種映射關系 

         節省數據庫空間 擴展數據庫使用范圍 能在不同數據庫用戶之間實現無縫交互

         簡化對象訪問 和提高對象訪問的安全性 

         私有同義詞 共有同義詞 public關鍵字

         私有同義詞需要授權 才允許其他用戶訪問 

 

# 為sys用戶表staff 創建一個私有同義詞 

create or replace synonmn st for omm.staffs;

# 給smith 用戶授權st 同義詞的對象權限

grant select|create session  ON st TO smith ;

# 刪除synonmn

drop public synonmn if exists st force; 

 

觸發器 

特殊種類的存儲過程 通過制定某個事件觸發 執行 一般用於數據審計 數據備份等 

對表的select insert update delete merge 進行監控 當發生事件觸發觸發器 

數據更改訪問前觸發 或者數據更改訪問后觸發觸發器 

 

create trigger

觸發器不能出現 DDL DCL 

一個表上最多有8個觸發器 

不支持本地臨時表上創建觸發器 

普通用戶的觸發器 不允許基於SYS用戶表創建 

創建觸發器時,最后/ 作為結束 不能省略 必須單獨成行 

 

create or replace trigger trig_alter_insert after on staffs begin 

    insert into t_trig_log values(trig_log_seq.nextval, 'after insert'); end; /

# 修改觸發器 

 
         

alter  trigger schema.trigger_name enable| disable   # 啟動 不生效 

 
         

drop trigger trig_after_insert # 刪除

 

 

 

大對象 

BLOB 可變長對象 CLOB 可變長字符串  IMAGE 圖像 

 

 

 

 

 

    

 

 

 

 數據庫並發管理

並發概念 數據庫允許多個用戶連接 訪問 

如果對數據的並發和訪問 沒有修改和加以控制 會破壞數據庫的一致性 

在數據庫中並發控制 以事務為單位進行的 並發控制機制是對性能的核心及基石

 

事務的概念 

事務是數據庫的邏輯工作單位 是用戶定義的一組操作列 一個事務可以是一條sql語句 一組sql語句或整個程序 

事務內的操作要不不做 要么全做 是一個不可分割的單位 

ACID 原子性 一致性 持續性 隔離性 

 

原子:一個事務是原子的 ,要么完整的執行下來 要么干脆就不做 

隔離:並發執行事務全部結束后 其效果等同於事務串行執行

持久性: 事務的操作 一旦提交 對數據中數據的改變是永久的

一致性:事務執行之前和事務執行之后必須處於一致性狀態

 

事務具有以下特性

事務隱形啟動 第一次對數據修改自動啟動事務 沒有顯示start transation 語句 

事務啟動時 分配事務的唯一標識 XID 

默認非自動提交事務 語句結束不提交事務 可以通過設置會話參數 auto commit 改為自動提交 

事務結束 產生事務唯一的屬性SCN 

DDL在獨立事務內運行 執行前會結束當前會話已經運行的事務  

 

並發場景DDL DCL DML 

事務有唯一的XID 事務狀態 SCN時間戳 

事務狀態 END BEGIN  xa prepare xa rollback 

 

事務級別 : read commit 

讀提交  語句執行時,獲取當前系統SCN作為當前語句查詢的SCN 

整個語句的可見結果由語句開始的那一刻決定 不受后續其他事務影響

結果集默認保持一致性讀原則 

 

事務級別 :read current commited 

語句開始執行時 獲取當前的SCN做當前語句查詢SCN 

語句執行過程中 獲取當前訪問最近一次提交記錄作為可見版本 

讀已提交的一種 單結果集不一致的用於對一直 較低的場景

 

事務級別 :serializable  

事務內所有執行語句 獲取當前事務開始SCN 作為語句的查詢SCN 

語句的可見結果在事務開始那一刻決定 不受后續其他事務影響

事務更新沖突時 等待對方事務結束 如果記錄發生變化則報錯 否則繼續操作 

串行化 數據快照級別的串行化 訪問記錄不對記錄加鎖 

 

啟動事務:隱形啟動
提交事務:自動提交 顯性提交
回退事務:事務執行失敗 自動回滾 ,手動rollback

 

讀寫並發
寫會將上一個版本 記錄到UNDO區域
查詢不加鎖 通過讀undo獲取可見版本
行鎖不阻塞讀 只阻塞其他事務 對改行的修改

DML並發
DML對表加共享鎖
修改一行數據前 對行加鎖 阻塞其他事務對這行進行修改
已經對改行加鎖的事務未提交之前 其他要修改的該行的事務只能等待事務提交
DML 結束時候 不釋放鎖和行鎖 提交的時候放表鎖和行鎖

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM