觸發器
是特定事件出現的時候,自動執行的**塊。類似於儲存過程,但是使用者不能直接呼叫他們。
功能:1、 允許/限制對錶的修改
2、 自動生成派生列,比如自增字段
3、 強制資料一致性
4、 提供審計和日誌記錄
5、 防止無效的事務處理
6、 啟用複雜的業務邏輯
開始create trigger biufer_employees_department_id
before insert or update
of department_id
on employees
referencing old as old_value
new as new_value
for each row
when (new_value.department_id<>80 )
begin
:new_value.***mission_pct :=0;
end;
/觸發器的組成部分:
1、 觸發器名稱
2、 觸發語句
3、 觸發器限制
4、 觸發操作
1、 觸發器名稱
create trigger biufer_employees_department_id
命名習慣:
biufer(before insert update for each row)
employees 表名
department_id 列名
2、 觸發語句
比如:表或檢視上的dml語句
ddl語句
資料庫關閉或啟動,startup shutdown 等等
before insert or update
of department_id
on employees
referencing old as old_value
new as new_value
for each row
說明:1、 無論是否規定了department_id ,對employees表進行insert的時候
2、 對employees表的department_id列進行update的時候
3、 觸發器限制
when (new_value.department_id<>80 )
限制不是必須的。此例表示如果列department_id不等於80的時候,觸發器就會執行。
其中的new_value是代表跟新之後的值。
4、 觸發操作
是觸發器的主體
begin
:new_value.***mission_pct :=0;
end;
主體很簡單,就是將更新後的***mission_pct列置為0
觸發:insert into employees(employee_id,
last_name,first_name,hire_date,job_id,email,department_id,salary,***mission_pct )
values( 12345,』chen』,』donny』, sysdate, 12, 『donny@hotmail.***』,60,10000,.25);
select ***mission_pct from employees where employee_id=12345;
觸發器不會通知使用者,便改變了使用者的輸入值。
觸發器型別:
1、 語句觸發器
2、 行觸發器
3、 instead of 觸發器
4、 系統條件觸發器
5、 使用者事件觸發器
1、 語句觸發器
是在表上或者某些情況下的檢視上執行的特定語句或者語句組上的觸發器。能夠與insert、update、delete或者組合上進行關聯。但是無論使用什麼樣的組合,各個語句觸發器都只會針對指定語句啟用一次。比如,無論update多少行,也只會呼叫一次update語句觸發器。
例子:需要對在表上進行dml操作的使用者進行安全檢查,看是否具有合適的特權。
create table foo(a number);
create trigger biud_foo
before insert or update or delete on foo
/即使sys,system使用者也不能修改foo表
[試驗]
對修改表的時間、人物進行日誌記錄。
1、 建立試驗表
create table employees_copy as select *from hr.employees
2、 建立日誌表
create table employees_log(who varchar2(30),when date);
3、 在employees_copy表上建立語句觸發器,在觸發器中填充employees_log 表。
create or replace trigger biud_employee_copy
before insert or update or delete on employees_copy
begin
insert into employees_log(who,when) values( user, sysdate);
end;
/4、 測試
update employees_copy set salary= salary*1.1;
select *from employess_log;
5、 確定是哪個語句起作用?
即是insert/update/delete中的哪乙個觸發了觸發器?
可以在觸發器中使用inserting / updating / deleting 條件謂詞,作判斷:
begin
if inserting then
-----
elsif updating then
-----
elsif deleting then
------
end if;
end;
if updating(『col1』) or updating(『col2』) then
------
end if;
[試驗]
1、 修改日誌表
alter table employees_log
add (action varchar2(20));
2、 修改觸發器,以便記錄語句型別。
2、 行觸發器
是指為受到影響的各個行啟用的觸發器,定義與語句觸發器類似,有以下兩個例外:
1、 定義語句中包含for each row子句
2、 在before……for each row觸發器中,使用者可以引用受到影響的行值。
比如:定義:
create trigger biufer_employees_department_id
before insert or update of department_id on employees_copy
referencing old as old_value new as new_value
for each row
when (new_value.department_id<>80 )
begin
:new_value.***mission_pct :=0;
end;
/referencing 子句:
執行dml語句之前的值的預設名稱是 :old ,之後的值是 :new
insert 操作只有:new
delete 操作只有 :old
update 操作兩者都有
Mysql基礎知識 觸發器
在資料庫系統中,當執行表事件時,則會啟用觸發器,從而執行其包含的操作 在具體的應用中,之所以會經常使用出發器資料物件,是由於該物件能夠加強資料庫表中資料的完整性約束和業務規則等。按照觸發器啟用後執行語句數目,可以將觸發器分為 乙個執行語句的觸發器 和 多個執行語句的觸發器 一 建立一條執行語句的觸發...
SqlServer觸發器的基礎知識
觸發器的基礎知識 create trigger tr name on table view update insert delete with encryption as update col name 說明 1 tr name 觸發器名稱 2 on table view 觸發器所作用的表。乙個觸發...
基礎 觸發器
github mysql 從 5.0.2 開始支援觸發器。觸發是與表相關的資料庫操作,在滿足定義條件時觸發,並執行觸發器中定義的語句。可以協助應用程式在資料庫端確保資料的完整性,減少不必要的邏輯處理。觸發器只能建立在永久表上,不能建立在臨時表上。對於同乙個表,相同觸發時間,相同觸發事件,只能定義乙個...