>>>>行級觸發器
>>>>語句級觸發器
一、為什麼要用觸發器
跟蹤並記錄所有對雇員表的表結構進行改變的操作,如新增一列,修改列的型別、刪除表等ddl操作,
要將這些操作儲存到乙個審計表中,以備以後查詢。
1、分析:只要一變動表結構就要記錄所有操作到乙個審計表中。
2、觸發器能夠滿足需求:
①不需要顯式呼叫來執行,而是由乙個事件來啟動執行,即當某個事件發生時自動地隱式執行。例如,修改表結構操作隱式呼叫插入審計表的操作。
②觸發器不能接收引數,所以可以通過其他oracle事件來觸發呼叫。
上述oracle事件包括一下幾種情況:
a、對資料庫的表進行的insert,update,delete操作或對檢視進行類似的操作。
b、執行ddl操作。
c、資料庫的啟動與關閉。
二、觸發器的語法
create [ or replace ] trigger trigger_name
[ or ]
on [ schema. ] table_or_view_name
[ referencing [ new as new_row_name ] [ old as old_row_name ] ]
[ for each row ]
[ when ( condition ) ]
[ declare
variable_declation ]
begin
statements;
[ exception
exception_handlers ]
end [trigger_name ] ;
語法裡面:
>> before和after:在事件發生之前或之後啟用觸發器。
>> instead of:如果使用此子句,表示可以執行觸發器**來代替導致觸發器呼叫的事件。
>> insert / delete / update 指定構成觸發器事件的資料操縱型別,update還可以指定列的列表。
>> referencing:指定新行(即將更新)和舊行(更新前)的其他名稱,預設為 new 和 old 。
>> table_or_view_name:要建立觸發器的表或檢視的名稱。
>> for each row:指定是否對受影響的每行都執行觸發器,即行級觸發器,如果不使用此子句,則為語句級觸發器。
>> when :限制執行觸發器的條件,該條件可以包括新舊資料值的檢查。
>> declare```end:乙個標準的pl / sql塊。
例項:建立乙個觸發器,當scott.emp被刪除一條記錄時,把被刪除記錄寫到刪除日誌裡面去。
1、觸發器語句
觸發器語句是那些可以導致觸發器的事件,即在表或檢視上執行的 insert,delete,update之類的dml語句,在模式物件上執行的ddl語句或資料庫事件。
在上面的例項中,下面的**構成了觸發器語句。
before delete
on emp
for each row
這說明,觸發器會在這些事件之前隱式執行:當對emp表執行delete語句時,觸發器將在受到影響的每一行上執行一次。
但是,觸發器是否真正執行還要檢查觸發器限制條件,只有滿足限制條件才會執行。
2、觸發器限制
3、觸發器操作
三、觸發器的型別
(1)行級觸發器
四、觸發器的管理
(1)觸發器的狀態
(2)刪除觸發器
drop trigger 觸發器名;
(3)觸發器的選擇
(4)dml觸發器基本要點
(5)dml觸發器的限制
mysql 之觸發器 增刪改查
在mysql server裡面也就是對某乙個表的一定的操作,觸發某種條件 insert,update,delete 等 從而自動執行的一段程式。從這種意義上講觸發器是乙個特殊的儲存過程,用與更新危險提示 表1 主表 drop table if exists sih main create table...
MySQL 觸發器增刪改查基本操作
觸發器是與表有關的資料庫物件,指在insert updateldelete之前或之後,觸發並執行觸發器中定義的sql語句集合。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性,日誌記錄,資料校驗等操作。大約是機關 觸發器型別 我們可以使用old,new 來獲取被修改的物件和修改後的物件 型別o...
oracle觸發器中增刪改查本表
oracle觸發器中增刪改查本表 1 只有before insert觸發器中才可以查詢或更新本表 create or replace trigger tri test ins before insert on test for each row declare v cnt integer begin...