什麼是dml觸發器?
dml觸發器是指基於dml操作所建立的觸發器.
(dml操作:select、update、insert、delete,用來對資料庫裡的資料進行操作)
dml觸發器的作用?
dml觸發器可用於實現資料安全保護、資料審計、資料完整性、參照完整性、資料複製等功能.
dml觸發器型別?
1.語句觸發器
在指定的操作語句之前或之後執行一次,不管這條語句影響了多少行.
2.行觸發器
觸發語句作用的每一條記錄都被觸發,在行級觸發器中使用 :old 和 :new 偽記錄變數,識別值的狀態.
:old 表示操作之前該行的值
:new 表示操作之後該行的值
建立dml觸發器語法:
語句觸發器:
delete from empnew where empno=7788;
create [or replace] trigger trigger_name
on 表名
plsql塊
行觸發器:
delete from empnew where empno=7788;
create [or replace] trigger trigger_name
on 表名
[for each row [when(條件)]]
plsql塊
例項1:實現資料的安全保護功能: 禁止在休息日(周
六、週日)改變emp表資料
create or replace trigger emp_trigger1
before insert or update or delete
on emp
begin
if to_char(sysdate,'day') in ('星期六','星期日') then
end if;
end;
當執行刪除操作時,會自定執行觸發器
例項1屬於語句觸發器.
例項2: 實現資料審計
功能: 審計員工資訊表資料的變化,審計刪除時間,以及被刪除的雇員名.
--建立審計表
create table delete_emp_audit(
name varchar2(10), --員工姓名
delete_time date --刪除時間
);--建立觸發器
create or replace trigger del_emp_tigger
after delete
on emp
for each row
begin
insert into delete_emp_audit values(:old.ename,sysdate);
end;
--測試
delete from emp where empno =7499;
首先建立一張審計表,然後建立觸發器.最後刪除資料觸發已建立的觸發器.
查詢審計表,發現裡面新增了一條刪除的員工姓名和刪除時間.
例項2是乙個行級觸發器.
例項3:實現資料完整性
功能: 要求員工漲後的工資不能低於原來的工資,並且所漲的工資不能超過原工資的50%
create or replace trigger tr_check_sal
before update of sal --of 指定更新sal列時觸發 觸發器
on emp
for each row
when (new.sal < old.sal or new.sal > old.sal * 1.5) --此處new和old不加冒號(:),因為when語句不在qlsql塊內部
begin
end;
當修改員工工資時會觸發這個觸發器
例項3也是行級觸發器
例項4:實現參照完整性
功能: 級聯更新dept表的主鍵列以及emp表的外來鍵列
create or replace trigger upd_cascade_trigger
after update of deptno
on dept
for each row
begin
update emp set deptno = :new.deptno where deptno = :old.deptno;
end;
執行修改dept表中deptno列,會觸發定義的觸發器upd_cascade_trigger,在觸發器中會把emp表對應的deptno欄位進行更新操作.
--測試
update dept set deptno =50 where deptno =10;
查詢一下更新後的員工資訊
以上就是對dml觸發器用法的介紹.
DML觸發器觸發順序
dml觸發器觸發時,dml語句的執行順序 1 語句之前級觸發器 2 行之前級觸發器 3 語句本身 4 行之後級觸發器 5 語句之後級觸發器 例如對錶table new進行更新,使用臨時表記錄觸發器的激發順序,如 所示 語句之前級觸發器 create or replace trigger bstate...
DML觸發器的缺憾
tom說過他希望三樣東西不曾存在 觸發器,自治事務,when others 級聯刪除 級聯修改,在設計良好的系統中是不存在的 即使有,那也是小概率事件,必須專門寫一段指令碼來解決,而不是作為常規功能存在 不得不用觸發器,要麼是原系統模組化做得不夠好,要麼是不允許改動原有的 當然有時候不是不允許,而是...
DDL觸發器與DML觸發器比較
dml觸發器 要防止對資料庫架構進行某些更改。希望資料庫中發生某種情況以響應資料庫架構中的更改。要記錄資料庫架構中的更改或事件。僅在執行觸發 ddl 觸發器的 ddl 語句後,ddl 觸發器才會激發。ddl 觸發器無法作為 instead of 觸發器使用。下面的示例顯示如何使用 ddl 觸發器阻止...