『壹』 Oracle資料庫中有關觸發器問題
觸發器是一種特殊類型的存儲過程 它不同於存儲過程 觸發器主要是通過事件進行觸發而被執行的 觸發器的觸發事件分可為 類 分別是DML事件 DDL事件和資料庫事件 而存儲過程可以通過存儲過程名字而被直接調用 當對某一表進行諸如UPDATE INSERT DELETE 這些操作時 sql Server 就會自動執行觸發器所定義的SQL 語句 從而確保對數據的處理必須符合由這些SQL 語句所定義的規則
觸發器是特定事件出現的時候 自動執行的代碼塊 類似於存儲過程 但是用戶不能直接調用他們
觸發器功能
允許/限制對表的修改
自動生成派生列 比如自增欄位
強制數據一致性
提供審計和日誌記錄
防止無效的事務處理
啟用復雜的業務邏輯
觸發器種類
觸發器的種類可劃分為 種 數據操縱語言(DML)觸發器 替代(INSTEAD OF)觸發器 數據定義語言(DDL)觸發器 資料庫事件觸發器
數據操縱語言(DML)觸發器 簡稱DML觸發器 是定義在表上的觸發器 創建在表上 由DML事件引發的觸發器 編寫DML觸發器時的兩點要素是 確定觸發的表 即在其上定義觸發器的表 確定觸發的事件 DML觸發器的觸發事件有INSERT UPDATE和DELETE三種;替代觸發器 簡稱INSTEADOF觸發器 創建在視圖上 用來替換對視圖進行的刪除 插入和修改操作; 數據定義語言(DDL)觸發器 簡稱DDL觸發器 定義在模式上 觸發事件是數據對象的創建和修改;資料庫事件觸發器 定義在整個資料庫或模式上 觸發事件是資料庫事件
ORACLE產生資料庫觸發器的語法為
CREATE [OR REPLACE] TRIGGER 觸發器名
{BEFORE|AFTER|INSTEAD OF} 觸發事件 [OR 觸發事件 ]
ON 表名
WHEN 觸發條件
[FOR EACH ROW]
DECLARE
聲明部分
BEGIN
主體部分
END;
其中
觸發器名 觸發器對象的名稱 由於觸發器是資料庫自動執行的 因此該名稱只是一個名稱 沒有實質的用途 一個觸發器可由多個不同的數據操縱語言操作觸發 在觸發器中 可用INSERTING DELETING UPDATING謂詞來區別不同的數據操縱語言操作 這些謂詞可以在IF分支條件語句中作為判斷條件來使用
觸發時間 指明觸發器何時執行 該值可取 觸發的時間有BEFORE和AFTER兩種 分別表示觸發動作發生在DML語句執行之前和語句執行之後 確定觸發級別 有語句級觸發器和行級觸發器兩種 語句級觸發器表示SQL語句只觸發一次觸發器 行級觸發器表示SQL語句影響的每一行都要觸發一次
Before 表示在資料庫動作之前觸發器執行;在SQL語句的執行過程中 如果存在行級BEFORE觸發器 則SQL語句在對每一行操作之前 都要先執行一次行級BEFORE觸發器 然後才對行進行操作 如果存在行級AFTER觸發器 則SQL語句在對每一行操作之後 都要再執行一次行級AFTER觸發器
after 表示在資料庫動作之後出發器執行 如果存在語句級AFTER觸發器 則在SQL語句執行完畢後 要最後執行一次語句級AFTER觸發器
觸發事件 指明哪些資料庫動作會觸發此觸發器 指INSERT DELETE或UPDATE事件 事件可以並行出現 中間用OR連接;
insert 資料庫插入會觸發此觸發器;
update 資料庫修改會觸發此觸發器;
delete 資料庫刪除會觸發此觸發器
表 名 資料庫觸發器所在的表
for each row 表示觸發器為行級觸發器 省略則為語句級觸發器 對表的每一行觸發器執行一次
觸發器的創建者或具有DROP ANY TIRGGER系統許可權的人才能刪除觸發器 刪除觸發器的語法如下
DROP TIRGGER 觸發器名
可以通過命令設置觸發器的可用狀態 使其暫時關閉或重新打開 即當觸發器暫時不用時 可以將其置成無效狀態 在使用時重新打開 該命令語法如下
ALTER TRIGGER 觸發器名 {DISABLE|ENABLE}
其中 DISABLE表示使觸發器失效 ENABLE表示使觸發器生效
同存儲過程類似 觸發器可以用SHOW ERRORS 檢查編譯錯誤
如果有多個觸發器被定義成為相同時間 相同事件觸發 且最後定義的觸發器是有效的 則最後定義的觸發器被觸發 其他觸發器不執行 觸發器體內禁止使用MIT ROLLBACK SAVEPOINT語句 也禁止直接或間接地調用含有上述語句的存儲過程 定義一個觸發器時要考慮上述多種情況 並根據具體的需要來決定觸發器的種類
觸發器的作用
觸發器的主要作用就是其能夠實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據的一致性 除此之外 觸發器還有其它許多不同的功能
( ) 強化約束(Enforce restriction)
觸發器能夠實現比CHECK 語句更為復雜的約束
( ) 跟蹤變化Auditing changes
觸發器可以偵測資料庫內的操作 從而不允許資料庫中未經許可的指定更新和變化
( ) 級聯運行(Cascaded operation)
觸發器可以偵測資料庫內的操作 並自動地級聯影響整個資料庫的各項內容 例如 某個表上的觸發器中包含有對另外一個表的數據操作(如刪除 更新 插入)而該操作又導致該表上觸發器被觸發
( ) 存儲過程的調用(Stored procere invocation)
為了響應資料庫更新觸 發器可以調用一個或多個存儲過程 甚至可以通過外部過程的調用而在DBMS( 資料庫管理系統)本身之外進行操作
由此可見 觸發器可以解決高級形式的業務規則或復雜行為限制以及實現定製記錄等一些方面的問題 例如 觸發器能夠找出某一表在數據修改前後狀態發生的差異 並根據這種差異執行一定的處理 此外一個表的同一類型(INSERT UPDATE DELETE)的多個觸發器能夠對同一種數據操作採取多種不同的處理
總體而言 觸發器性能通常比較低
lishixin/Article/program/Oracle/201311/18340
『貳』 資料庫觸發器有什麼作用
觸發器的作用:
自動計算數據值,如果數據的值達到了一定的要求,則進行特定的處理。
同步實時地復製表中的數據。
實現復雜的非標準的資料庫相關完整性規則。
可在寫入數據表前,強制檢驗或轉換數據。
觸發器發生錯誤時,異動的結果會被撤銷。
部分資料庫管理系統可以針對數據定義語言(DDL)使用觸發器,稱為DDL觸發器。
可依照特定的情況,替換異動的指令 (INSTEAD OF)。
(2)觸發器資料庫日誌性能影響擴展閱讀:
分類
SQL Server 包括三種常規類型的觸發器:DML 觸發器、DDL 觸發器和登錄觸發器。
DML觸發器
當資料庫中表中的數據發生變化時,包括insert,update,delete任意操作,如果我們對該表寫了對應的DML觸發器,那麼該觸發器自動執行。
DML觸發器的主要作用在於強制執行業 務規則,以及擴展Sql Server約束,默認值等。因為我們知道約束只能約束同一個表中的數據,而觸發器中則可以執行任意Sql命令。
DDL觸發器
它是Sql Server2005新增的觸發器,主要用於審核與規范對資料庫中表,觸發器,視圖等結構上的操作。比如在修改表,修改列,新增表,新增列等。
它在資料庫結構發生變化時執行,我們主要用它來記錄資料庫的修改過程,以及限製程序員對資料庫的修改,比如不允許刪除某些指定表等。
登錄觸發器
登錄觸發器將為響應 LOGIN 事件而激發存儲過程。與 SQL Server 實例建立用戶會話時將引發此事件。登錄觸發器將在登錄的身份驗證階段完成之後且用戶會話實際建立之前激發。
因此,來自觸發器內部且通常將到達用戶的所有消息(例如錯誤消息和來自 PRINT 語句的消息)會傳送到 SQL Server 錯誤日誌。如果身份驗證失敗,將不激發登錄觸發器。
參考資料來源:網路-觸發器
『叄』 存儲過程和觸發器會不會影響mysql的性能
這個性能問題很多都是相對的,譬如如果你不用
存儲過程
,那碧山虧
應悔神用伺服器
和
資料庫伺服器
的交互就會增多,這樣也導致性能降低。一般而言,存儲過程的使用降低應唯如用的負載,更多的要考慮使用的合理性。譬如觸發器過多也會影響你操作表的速度,因而你應該根據系統自身情況去分析設計
『肆』 MS SQL SERVER2005 中觸發器對性能的影響有多大
在大量並發的情況下,使用觸發器是很危險的事。在並發量大的系統中睜消觸發器很影響性能的.
如伏則果非用不可,一定要注意SQL的質量.
對性能的影響大小跟SQL的質量關系很大.不能一概而論.觸發器多不是好事:
第一:一定會影響性能,若是數據量大時,每次都要觸發上百上千觸發器可想而知
第二缺早棚:基於維護方面,不談有多少觸發器,當每修改一次觸發表相應觸發器就失效,符出代價可想而知.
不建義多用觸發器,用函數與過程代替之.
『伍』 MySQL里寫trigger,會不會導致性能下降的問題
觸發器的困銀豎開銷肯定是比較大的,能用約束解決的最好用汪大約束解決,或以其他替代方案解決。但是話又說回來,使用觸發器並不一定會導致系統性能下降,這個需要具體情況具體分析。一般來講,只要日常操作不會頻繁觸發觸發器工作,又或者觸發器的動作不屬於需要耗費大量系統資源和時間的操作,使用觸發器都不會導搏旦致系統性能下降。
『陸』 ssis 數據流源可以有哪些資料庫
兩種情況:
一:有數據的添加時間createdate
1、取數據倉庫中max(createdate)
2、取數據源中數據,條件createdate>max(createdate)
二、有自增列id
1、取數據倉庫中max(id)
2、取數據源中數據,條件id>max(id)
如需更新,根據更新時間同樣
一般的增量抽取有以下四種情況
1、觸發器 :對資料庫性能的影響比較大。
2、時間戳:在表設計的時候,很多表沒有設計時間戳,如果現在該業務表結構,那是相當的麻煩!要牽扯很多部門。
3、全表對比:效率就不敢恭維了。隨著數據量的增加,。。。
4、日誌對比:也是比較麻煩的。對於 mysql sqlserver 更麻煩!
『柒』 SQL里的觸發器的優缺點它的存貯速度和執行速度如何
觸發器的優點: 以事件方式來處理. 當數據發生變化的時候, 自動作處理.
缺點: 當資料庫之間 導出導入的時候, 可能會引起不必要的觸發邏輯.
存貯速度和執行速度: 代碼是存儲在伺服器上, 執行速度主要取決於 資料庫伺服器的性能與觸發器代碼的復雜程度。