SQLite的乙個觸發器的例子

2021-07-25 15:58:09 字數 2154 閱讀 3205

sqlite3觸發器的實戰

你可以搜尋「sqlite 觸發器」或「sqlite 觸發器的sql語法」,然後你應該能找到乙個pdf文件或其他樣式的檔案。它簡要講解了一些基本內容,如果你和我一樣什麼都不知道,可以先看一下它。

觸發器分為「語句級觸發器」和「行級觸發器」。

語句級觸發器是指每執行一條dml語句,該觸發器就執行一次。

行級觸發器是指每個dml操作影響幾條記錄,就會觸發幾次(for each row),

行級觸發器中由於涉及到了每條記錄的資料變動,所以對於每條記錄的資料來說就有新值和舊值之分。

at this time sqlite supports only for each row triggers, not for each statement triggers.

此時,sqlite僅支援for each row觸發器,而不支援for each statement觸發器。

sqlite的trigger的語法圖:

從sqlite的trigger的語法圖裡面可以看到,語法圖裡面並沒有if-else語句,sqlite的trigger貌似不支援if-else語句,好像也不支援case-when-then-else語句。

sqlite的trigger貌似也不支援定義變數。不過,可以將臨時值插入乙個臨時表(key,value)中,模擬出來變數進行使用。

開始:

--建立key_value表。

create table key_value(

key varchar(32) not null primary key,

value varchar(32)

);--建立log_info表。

create table log_info(

idx integer primary key, --a column declared integer primary key will autoincrement.

dttm timestamp not null default (datetime('now','localtime')),

info text

);--sqlite的觸發器的語法圖裡面沒有if-else語句。同時有when語句。

--其中的when操作符表示了執行該觸發器的條件,彌補了sqlite沒有if-else這樣邏輯分析語句的缺陷。

--注:sqlite中,連線字串不是使用+,而是使用||。

--建立t_key_value_insert觸發器。向key_value表insert資料時,觸發器被呼叫。

create trigger t_key_value_insert after insert on key_value

for each row when new.key='yyyymmdd'

begin

insert into log_info(info) values('[after_insert]['||new.key||']['||new.value||']');

end;

--建立t_key_value_update觸發器。向key_value表update資料時,觸發器被呼叫。

create trigger t_key_value_update after update on key_value

for each row when new.key='yyyymmdd'

begin

insert into log_info(info) values('[after_update]['||new.key||']['||new.value||']');

end;

--向key_value表中新增資料,利用log_info表來觀察觸發器的反應。

replace into key_value(key,value)values('yyyymmdd','20160101');

replace into key_value(key,value)values('yyyymmdd','20160202');

replace into key_value(key,value)values('temp_key','temp_value');

update key_value set value='20160303' where key='yyyymmdd';

select * from log_info;

結束。

乙個觸發器的例子

create or replace trigger usremhr trg sq rule insert before insert on sq rule base for each row declare temp rule id varchar2 10 temp rul theme id var...

乙個Oracle觸發器的例子

有乙個表,表名是xx,有abcd四個字段,正常情況下,abc abd這三個欄位都可以唯一確定一條記錄,按理應該做成唯一索引,但由於歷史原因,該錶存在重複資料,但要刪掉哪一條需要人工判斷,無法用語句批量刪除,於是唯一索引加不上。但為了保證以後資料的準確性,需要控制新插進去的記錄是唯一的。於是我寫了乙個...

Oracle觸發器的乙個簡單例子

使用者狀態變成離職狀態,系統配置表被觸發,修改配置表狀態 create or replace trigger basedb userleft before update or delete on basedb users for each row declare local variables he...